第1章ruby初識(shí)

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章介紹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Qo_Tn 第一章 學(xué)習(xí) 1.1 Ruby ruby 特性 弱類(lèi)型 語(yǔ)言 1.3 下載安裝Ruby 和 Rai...
    Qo_Tn閱讀 233評(píng)論 0 0
  • 當(dāng)我們開(kāi)始寫(xiě)這本書(shū)時(shí),我們有一個(gè)宏大的計(jì)劃(那時(shí)我們還比較年輕)。我們希望將 Ruby 這門(mén)語(yǔ)言從頭至尾地描述一遍...
    Cloneable閱讀 588評(píng)論 0 0
  • Perl 6 from Ruby - Nutshell 基本語(yǔ)法 語(yǔ)句結(jié)束分號(hào) Ruby 使用換行(有幾個(gè)例外)來(lái)...
    焉知非魚(yú)閱讀 859評(píng)論 0 1
  • 今天review了一次ruby編程規(guī)范,把一些之前我不熟識(shí)的在這里記錄下來(lái)。 對(duì)于沒(méi)有主體的類(lèi),傾向使用單行定義。...
    john_ny閱讀 790評(píng)論 0 0
  • 因?yàn)楣ぷ麝P(guān)系需要用到Ruby和Rails,于是在端午假期里花了點(diǎn)時(shí)間快速的學(xué)習(xí)了下。這里做一個(gè)簡(jiǎn)單的記錄。 基礎(chǔ)數(shù)...
    shixiongfei閱讀 777評(píng)論 0 1

友情鏈接更多精彩內(nèi)容