第1章ruby初识

1.1.1ruby命令的执行方法

print("Hello")

p方法
无论是print方法还是puts方法,输出数值1和字符串"1"时,结果都是单纯的1,这样,我们有时候会无法判断结果到底属于哪个对象,p方法解决了这个问题,数值结果和字符串结果会以不同的形式输出。

print "100"
print 100
puts "100"
puts 100
p "100"
p 100

100100100
100
"100"
100

像这样,输出结果为字符串时,输出结果会被双引号括起来,一目了然。另外,使用 p 方法时,换行符(\n)、制表符(\t)等特殊字符不会转义,会像下 面那样直接输出。

1.12条件判断

if 条件 then
    条件成立时执行的语句
else
    条件不成立时执行的语句
end 
注意:then是可以省略的。

1.13循环

1.13.1while语句

while 循环条件 do
    循环语句
end

1.13.2times方法

循环次数.times do
    循环语句
end

2方便的对象

像数组、散列这样保存对象的对象,我们称为容器(container)。

2.1数组

2.1.1数组的创建

names = ["a", "b", "c"]

在保存对象时,如果指定了数组中不存在的索引值时,则数组的大小会随之改变。即Ruby数组的大小是按实际情况自动调整的。
示例

2.5.3 :001 > names = ["zhao", "qian", "sun", "li"]
 => ["zhao", "qian", "sun", "li"] 
2.5.3 :002 > names[4] = "wang"
 => "wang" 
2.5.3 :003 > names
 => ["zhao", "qian", "sun", "li", "wang"] 
2.5.3 :004 > 

2.1.5数组的元素

任何对象都可以作为数组元素保存到数组中。
Ruby数组还支持多种不同对象的混合保存。

2.5.3 :004 > mixed = [1, "wang",3,"李"]
 => [1, "wang", 3, "李"] 
2.5.3 :005 > mixed.class
 => Array 

像时间,文件等对象也都可以作为数组的元素。

2.1.6数组的大小

array.size

2.1.7数组的循环

Ruby提供了each方法。
语法如下:

数组 .each do |变量|
    循环语句
end
each后面do~end之间的部分叫做块(block)。 

2.2散列

散列(hash)也是一个程序里常用到的容器。散列是键值对(key-value pair)的一种数据结构。在 Ruby 中,一般是以字符串或者符号(Symbol)作为 键,来保存对应的对象。

2.2.1什么是符号

符号(symbol)是一种对象,一般作为名称标签来使用,用来表示方法等对象的名称,可以将符号简单理解为轻量级的字符串。
创建符号,只需要在标识符的开头加上:就可以了。
以下两种方式实现功能相同。

 sym = :foo
 => :foo 
 sym.class
 => Symbol 
 sym2 = :"foo"
 => :foo 
 sym2.class
 => Symbol 

符号能实现的功能,大部分字符串也能实现,那为什么还要使用符号呢?
像散列键这样只是单纯判断“是否相等”的处理中,使用符号会比字符串更加有效率,因此在实际编程中我们也会经常用到符号。

符号和字符串可以任意转换,对符号使用to_s方法可以得到字符串。
对字符串使用to_sym方法,则可以得到对应的符号。

2.5.3 :001 > sym = :foo
 => :foo 
2.5.3 :002 > sym.to_s
 => "foo" 
2.5.3 :003 > "foo".to_sym
 => :foo 

2.2.2散列的创建

使用{}把创建的内容括起来,用=>来定义获取对象时所需的(key),以及键相对应的对象(value)。

address = {:name => "高桥", :pinyin => "gaoqiao", :postal => "1234567"}

将符号当作键来使用时,程序还可以像下面这么写:

address = {name: "高桥", pinyin: "gaoqiao", postal: "1234567"}

2.2.3散列的使用

散列名 [键]
示例

2.5.3 :001 > address = {name: "高桥", pinyin: "gaoqiao"}
 => {:name=>"高桥", :pinyin=>"gaoqiao"} 
2.5.3 :002 > address[:name]
 => "高桥" 
2.5.3 :003 > address[:pinyin]
 => "gaoqiao" 
2.5.3 :004 > address[:tel] = "000-1234"
 => "000-1234" 
2.5.3 :005 > address
 => {:name=>"高桥", :pinyin=>"gaoqiao", :tel=>"000-1234"} 
2.5.3 :006 > address.class
 => Hash 
2.5.3 :007 > 
  address = {name: "高桥", pinyin: "gaoqiao", tel: 1234-000}
  address[:tel].class
 => Integer 

2.2.4散列的循环

语法如下:

散列 .each do |键变量, 值变量|
    循环语句
end 

示例如下:

2.5.3 :001 > address = {name: "高桥", pinyin: "gaoqiao", tel: 1234}
 => {:name=>"高桥", :pinyin=>"gaoqiao", :tel=>1234} 
2.5.3 :002 > address.each do |key, value|
2.5.3 :003 >     puts "#{key}: #{value}"
2.5.3 :004?>   end
name: 高桥
pinyin: gaoqiao
tel: 1234
 => {:name=>"高桥", :pinyin=>"gaoqiao", :tel=>1234} 

2.3正则表达式

在Ruby中处理字符串时,我们经常会用到正则表达式(regular expression)。可以非常简单的实现以下功能:
·将字符串与模式(pattern)相匹配
·使用模式分割字符串

某些使用场景:
1.找出包含xx字符串的行。
2.抽取oo和xx之间的字符串。

判断字符串是否适用于某模式的过程成为匹配,如果字符串适用于该模式则成为匹配成功。


正则匹配

匹配的例子
创建正则表达式的语法如下所示:

/模式/

例如,我们希望匹配Ruby字符串的正则表达式为:

/Ruby/

把希望匹配的内容直接写出来,就这么简单。匹配字母、数字、汉字时,模式按字符串原样写就可以了。

我们使用=~来匹配正则表达式和字符串,它与判断是否是同一个对象时所用到的==有点像。
匹配正则表达式与字符串的方法是:
/模式/=~希望匹配的字符串
若匹配成功,返回匹配部分的位置。
若匹配失败,返回nil。
示例如下:

2.5.3 :005 > /Ruby/ =~ "Rubyyyy"
 => 0 
2.5.3 :006 > /Ruby/ =~ "rubyyy"
 => nil 
2.5.3 :007 > /Ruby/i =~ "rubyyy"
 => 0 

正则表达式右边的/后面加上i表示不区分大小写进行匹配。
除此之外,正则表达式还要很多写法和用法,将在16章介绍。

你可能感兴趣的:(第1章ruby初识)