1.1.1ruby命令的執(zhí)行方法
print("Hello")
p方法
無(wú)論是print方法還是puts方法,輸出數(shù)值1和字符串"1"時(shí),結(jié)果都是單純的1,這樣,我們有時(shí)候會(huì)無(wú)法判斷結(jié)果到底屬于哪個(gè)對(duì)象,p方法解決了這個(gè)問(wèn)題,數(shù)值結(jié)果和字符串結(jié)果會(huì)以不同的形式輸出。
print "100"
print 100
puts "100"
puts 100
p "100"
p 100
100100100
100
"100"
100
像這樣,輸出結(jié)果為字符串時(shí),輸出結(jié)果會(huì)被雙引號(hào)括起來(lái),一目了然。另外,使用 p 方法時(shí),換行符(\n)、制表符(\t)等特殊字符不會(huì)轉(zhuǎn)義,會(huì)像下 面那樣直接輸出。
1.12條件判斷
if 條件 then
條件成立時(shí)執(zhí)行的語(yǔ)句
else
條件不成立時(shí)執(zhí)行的語(yǔ)句
end
注意:then是可以省略的。
1.13循環(huán)
1.13.1while語(yǔ)句
while 循環(huán)條件 do
循環(huán)語(yǔ)句
end
1.13.2times方法
循環(huán)次數(shù).times do
循環(huán)語(yǔ)句
end
2方便的對(duì)象
像數(shù)組、散列這樣保存對(duì)象的對(duì)象,我們稱(chēng)為容器(container)。
2.1數(shù)組
2.1.1數(shù)組的創(chuàng)建
names = ["a", "b", "c"]
在保存對(duì)象時(shí),如果指定了數(shù)組中不存在的索引值時(shí),則數(shù)組的大小會(huì)隨之改變。即Ruby數(shù)組的大小是按實(shí)際情況自動(dòng)調(diào)整的。
示例
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數(shù)組的元素
任何對(duì)象都可以作為數(shù)組元素保存到數(shù)組中。
Ruby數(shù)組還支持多種不同對(duì)象的混合保存。
2.5.3 :004 > mixed = [1, "wang",3,"李"]
=> [1, "wang", 3, "李"]
2.5.3 :005 > mixed.class
=> Array
像時(shí)間,文件等對(duì)象也都可以作為數(shù)組的元素。
2.1.6數(shù)組的大小
array.size
2.1.7數(shù)組的循環(huán)
Ruby提供了each方法。
語(yǔ)法如下:
數(shù)組 .each do |變量|
循環(huán)語(yǔ)句
end
each后面do~end之間的部分叫做塊(block)。
2.2散列
散列(hash)也是一個(gè)程序里常用到的容器。散列是鍵值對(duì)(key-value pair)的一種數(shù)據(jù)結(jié)構(gòu)。在 Ruby 中,一般是以字符串或者符號(hào)(Symbol)作為 鍵,來(lái)保存對(duì)應(yīng)的對(duì)象。
2.2.1什么是符號(hào)
符號(hào)(symbol)是一種對(duì)象,一般作為名稱(chēng)標(biāo)簽來(lái)使用,用來(lái)表示方法等對(duì)象的名稱(chēng),可以將符號(hào)簡(jiǎn)單理解為輕量級(jí)的字符串。
創(chuàng)建符號(hào),只需要在標(biāo)識(shí)符的開(kāi)頭加上:就可以了。
以下兩種方式實(shí)現(xiàn)功能相同。
sym = :foo
=> :foo
sym.class
=> Symbol
sym2 = :"foo"
=> :foo
sym2.class
=> Symbol
符號(hào)能實(shí)現(xiàn)的功能,大部分字符串也能實(shí)現(xiàn),那為什么還要使用符號(hào)呢?
像散列鍵這樣只是單純判斷“是否相等”的處理中,使用符號(hào)會(huì)比字符串更加有效率,因此在實(shí)際編程中我們也會(huì)經(jīng)常用到符號(hào)。
符號(hào)和字符串可以任意轉(zhuǎn)換,對(duì)符號(hào)使用to_s方法可以得到字符串。
對(duì)字符串使用to_sym方法,則可以得到對(duì)應(yīng)的符號(hào)。
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散列的創(chuàng)建
使用{}把創(chuàng)建的內(nèi)容括起來(lái),用=>來(lái)定義獲取對(duì)象時(shí)所需的(key),以及鍵相對(duì)應(yīng)的對(duì)象(value)。
address = {:name => "高橋", :pinyin => "gaoqiao", :postal => "1234567"}
將符號(hào)當(dāng)作鍵來(lái)使用時(shí),程序還可以像下面這么寫(xiě):
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散列的循環(huán)
語(yǔ)法如下:
散列 .each do |鍵變量, 值變量|
循環(huán)語(yǔ)句
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正則表達(dá)式
在Ruby中處理字符串時(shí),我們經(jīng)常會(huì)用到正則表達(dá)式(regular expression)??梢苑浅:?jiǎn)單的實(shí)現(xiàn)以下功能:
·將字符串與模式(pattern)相匹配
·使用模式分割字符串
某些使用場(chǎng)景:
1.找出包含xx字符串的行。
2.抽取oo和xx之間的字符串。
判斷字符串是否適用于某模式的過(guò)程成為匹配,如果字符串適用于該模式則成為匹配成功。

匹配的例子
創(chuàng)建正則表達(dá)式的語(yǔ)法如下所示:
/模式/
例如,我們希望匹配Ruby字符串的正則表達(dá)式為:
/Ruby/
把希望匹配的內(nèi)容直接寫(xiě)出來(lái),就這么簡(jiǎn)單。匹配字母、數(shù)字、漢字時(shí),模式按字符串原樣寫(xiě)就可以了。
我們使用=~來(lái)匹配正則表達(dá)式和字符串,它與判斷是否是同一個(gè)對(duì)象時(shí)所用到的==有點(diǎn)像。
匹配正則表達(dá)式與字符串的方法是:
/模式/=~希望匹配的字符串
若匹配成功,返回匹配部分的位置。
若匹配失敗,返回nil。
示例如下:
2.5.3 :005 > /Ruby/ =~ "Rubyyyy"
=> 0
2.5.3 :006 > /Ruby/ =~ "rubyyy"
=> nil
2.5.3 :007 > /Ruby/i =~ "rubyyy"
=> 0
正則表達(dá)式右邊的/后面加上i表示不區(qū)分大小寫(xiě)進(jìn)行匹配。
除此之外,正則表達(dá)式還要很多寫(xiě)法和用法,將在16章介紹。