使用Rails 需要掌握的ruby知識(shí)(一)

Ruby語言的知識(shí)點(diǎn)很多,不過對(duì)于Rails 開發(fā)者來說需要掌握的很少妒蔚。本文主要內(nèi)容來自于《ruby on rails tutoril》這本書,是對(duì)這本書學(xué)習(xí)后第四章的個(gè)人總結(jié),內(nèi)心非常感謝該書作者M(jìn)ichael Hartl,也非常感謝中文翻譯安道老師??


字符串和方法

Rails控制臺(tái):Rails控制臺(tái)是用來與Rails應(yīng)用交互的命令行工具青抛,它基于Ruby的交互程序(irb)開發(fā),可以使用ruby語言的所有功能酬核,本文的操作都是在Rails控制臺(tái)中完成的蜜另。

字符串

對(duì)于web應(yīng)用适室,字符串或許是最重要的數(shù)據(jù)結(jié)構(gòu),因?yàn)榫W(wǎng)頁的內(nèi)容就是從服務(wù)器發(fā)送給瀏覽器的字符串蚕钦。(書中原話)

如圖-1亭病,使用雙引號(hào)("")創(chuàng)建字符串鹅很;使用 + 拼接字符串嘶居;使用特殊句法 #{} 進(jìn)行插值操作。

圖-1

Ruby 也支持單引號(hào)創(chuàng)建字符串促煮,大多數(shù)情況下這兩種字符串效果是一樣的邮屁,二者最重要的區(qū)別是:Ruby 不會(huì)對(duì)單引號(hào)字符串進(jìn)行插值操作。

注釋:Ruby中的注釋以井號(hào) # 開始菠齿,一直到行尾佑吝。

對(duì)象和消息傳送

在Ruby中,一切皆對(duì)象绳匀,對(duì)象的作用:響應(yīng)消息芋忿。一般來說,傳給對(duì)象的消息是“方法”疾棵,也就是在這個(gè)對(duì)象上定義的函數(shù)戈钢。

>> "GongYangbo".length? ? ? ? ? ? #字符串響應(yīng)length方法,返回字符串中包含的字符數(shù)量
=> 10
empty? 方法后面的?是ruby的約定 是尔,說明返回的是布爾值殉了;
布爾值可以和? ? &&(與)? ? ||(或)? ? !(非)? 運(yùn)算符結(jié)合到一起使用拟枚;
>>? nil.to_s? ? ? ? #一切皆對(duì)象薪铜,nil也是對(duì)象,響應(yīng)to_s方法
=>? ""
>> puts "It's a palindrome!" if s == s.reverse ? ? ? #簡單的回文測試


數(shù)組和值域

數(shù)組是一組具有特定順序的元素恩溅。Ruby中可以包含不同類型的數(shù)據(jù)隔箍。

split 方法
>>? "gong yang bo".split? ? ? ? #把字符串拆分成有三個(gè)元素的數(shù)組
=>? ["gong", "yang", "bo"]
默認(rèn)情況下,split在空格處把字符串拆分成數(shù)組脚乡,不過也可以在幾乎任何地方拆分:
>> "fooxbarxbazx".split('x')
=> ["foo", "bar", "baz"]

數(shù)組可以響應(yīng)一系列方法
>> a
=> [42, 8, 17]
>> a.length? ? ? ? ? ? #數(shù)組中元素個(gè)數(shù)
=> 3
>> a.empty?? ? ? ? ? #數(shù)組是否為空
=> false
>> a.include?(42)#數(shù)組元素中是否包含42
=> true
>> a.sort? ? ? ? ? ? ? ? #排序
=> [8, 17, 42]
>> a.reverse? ? ? ? ? #元素對(duì)掉
=> [17, 8, 42]
>> a.shuffle? ? ? ? ? #打亂元素順序蜒滩,隨機(jī)變化
=> [17, 42, 8]
>> a
=> [42, 8, 17]
上面的方法都沒有修改 a 的值。如果要修改數(shù)組的值每窖,要使用相應(yīng)的“炸彈”(bang)方法(之所以這么叫是因?yàn)榘锏簦@里的感嘆號(hào)經(jīng)常都讀作“bang”):
>> a
=> [42, 8, 17]
>> a.sort!
=> [8, 17, 42]
>> a
=> [8, 17, 42]
使用push方法向數(shù)組中添加元素,或者使用等價(jià)的<<運(yùn)算符:
>> a.push(6)? ? ? ? ? ? ? ? ? # 把 6 加到數(shù)組末尾
=> [42, 8, 17, 6]
>> a << 7? ? ? ? ? ? ? ? ? ? # 把 7 加到數(shù)組末尾
=> [42, 8, 17, 6, 7]
>> a << "foo" << "bar"? ? ? ? # 串聯(lián)操作
=> [42, 8, 17, 6, 7, "foo", "bar"]

join 方法:split方法可以把字符串拆分成數(shù)組窒典,使用join方法可以把數(shù)組轉(zhuǎn)化成字符串(相反的操作)(圖-2)

圖-2

值域(range)
Range是范圍對(duì)象的類蟆炊,定義的時(shí)候可以使用范圍操作符“..”或者“...”,“..”生成的范圍對(duì)象包括起點(diǎn)和終點(diǎn)瀑志,“...”生成的范圍對(duì)象不包括起點(diǎn)和終點(diǎn)涩搓,范圍是由是一序列有順序污秆、有規(guī)律的元素對(duì)象組成,任何有順序昧甘,有規(guī)律的一組對(duì)象良拼,都可以用Range對(duì)象來定義,如數(shù)字充边、字母庸推、字符串、甚至?xí)r間浇冰。
#遍歷2017-01-01至2017-02-28每一天贬媒,對(duì)象是Date
begin_date = Date.parse '2017-01-01'
end_date = Date.parse '2017-02-28'
r1=begin_date .. end_date
r1.each{|date| puts date}


塊(block)

數(shù)組和值域可以響應(yīng)的方法中有很多都可以跟著一個(gè)塊(block)
>> (1..5).each { |i| puts 2 * i }
2
4
6
8
10
=> 1..5
這段代碼在值域(1..5)上調(diào)用each方法,然后又把{ |i| puts 2 * i }這個(gè)塊傳給each方法肘习。|i|兩邊的豎線在 Ruby 中用來定義塊變量际乘。只有方法本身才知道如何處理后面跟著的塊。這里漂佩,值域的each方法會(huì)處理后面的塊脖含,塊中有一個(gè)局部變量i,each會(huì)把值域中的各個(gè)值傳進(jìn)塊中投蝉,然后執(zhí)行其中的代碼养葵。
花括號(hào)是表示塊的一種方式,除此之外還有另一種方式:
>> (1..5).each do |i|
>> ? ? puts 2 * i
>> end
2
4
6
8
10
=> 1..5

inject 方法
arr1 = []
arr2 = [1,2,3]
arr2.each do |i|
? ? arr1 << i + 1
end
p arr1
#=> [2, 3, 4]

使用inject:
arr = arr2.inject ([]) do |arr1, i|
? ? arr1 << i + 1
end
p arr
#=>[2,3,4]

map 方法
>> (1..5).map { |i| i**2 }? ? ? ? ? # ** 表示冪運(yùn)算
=> [1, 4, 9, 16, 25]
>> %w[a b c]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # %w 用于創(chuàng)建元素為字符串的數(shù)組
=> ["a", "b", "c"]
>> %w[a b c].map { |char| char.upcase }
=> ["A", "B", "C"]
>> %w[A B C].map { |char| char.downcase }
=> ["a", "b", "c"]
map方法返回的是在數(shù)組或值域中每個(gè)元素上執(zhí)行塊中代碼后得到的結(jié)果墓拜。
map后面的塊在塊變量上調(diào)用一個(gè)方法港柜,這種操作經(jīng)常使用簡寫形式:
>> %w[A B C].map { |char| char.downcase }
=> ["a", "b", "c"]
>> %w[A B C].map(&:downcase)
=> ["a", "b", "c"]

生成隨機(jī)8個(gè)字母組合:
>> ('a'..'z').to_a? ? ? ? ? ? ? ? ? ? # 由全部英文字母組成的數(shù)組
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
>> ('a'..'z').to_a.shuffle? ? ? ? ? ? # 打亂數(shù)組
=> ["c", "g", "l", "k", "h", "z", "s", "i", "n", "d", "y", "u", "t", "j", "q",
"b", "r", "o", "f", "e", "w", "v", "m", "a", "x", "p"]
>> ('a'..'z').to_a.shuffle[0..7]? ? ? # 取出前 8 個(gè)元素
=> ["f", "w", "i", "a", "h", "p", "c", "x"]
>> ('a'..'z').to_a.shuffle[0..7].join? # 把取出的元素合并成字符串
=> "mznpybuj"


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市咳榜,隨后出現(xiàn)的幾起案子夏醉,更是在濱河造成了極大的恐慌,老刑警劉巖涌韩,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畔柔,死亡現(xiàn)場離奇詭異,居然都是意外死亡臣樱,警方通過查閱死者的電腦和手機(jī)靶擦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雇毫,“玉大人玄捕,你說我怎么就攤上這事∨锓牛” “怎么了枚粘?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長飘蚯。 經(jīng)常有香客問我馍迄,道長福也,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任攀圈,我火速辦了婚禮暴凑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赘来。我一直安慰自己现喳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布撕捍。 她就那樣靜靜地躺著拿穴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忧风。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天球凰,我揣著相機(jī)與錄音狮腿,去河邊找鬼。 笑死呕诉,一個(gè)胖子當(dāng)著我的面吹牛缘厢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甩挫,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼贴硫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伊者?” 一聲冷哼從身側(cè)響起英遭,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亦渗,沒想到半個(gè)月后挖诸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡法精,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年多律,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搂蜓。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狼荞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帮碰,到底是詐尸還是另有隱情相味,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布收毫,位于F島的核電站攻走,受9級(jí)特大地震影響殷勘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昔搂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一玲销、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧摘符,春花似錦贤斜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至带族,卻和暖如春锁荔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝙砌。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工阳堕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人择克。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓恬总,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肚邢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子壹堰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法骡湖,內(nèi)部類的語法贱纠,繼承相關(guān)的語法,異常的語法勺鸦,線程的語...
    子非魚_t_閱讀 31,662評(píng)論 18 399
  • 《ilua》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 1...
    葉染柒丶閱讀 10,789評(píng)論 0 11
  • 《ijs》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 5,189評(píng)論 0 7
  • 我是做烘培蛋糕的换途,愛上他懊渡,是在工作中,現(xiàn)在還記得我們初次見面的場景军拟,那是夏天剃执,很熱的夏天,進(jìn)入裱花間懈息,他靠在立式的...
    奈何橋下見閱讀 303評(píng)論 0 1
  • 我的永無鄉(xiāng)在天空之城肾档,上面有一個(gè)大城堡城堡,外面有一個(gè)護(hù)城河,在保護(hù)我們的城堡怒见,河面很寬俗慈,而且特別甜,喝了...
    薛義之Harry閱讀 280評(píng)論 0 1