範圍無處不在:1月至12月,0至9日,50至67行,依此類推。 ruby支援範圍,並允許我們使用多種方式的範圍:
作為序列範圍:
首先,也許是最自然的使用範圍來表達序列。序列有乙個起點,乙個終點和序列中的連續值的方法來生產。
ruby建立'' ..''和'' ...''範圍內運算子使用這些序列。這兩個點的形式建立乙個包容性的範圍,而三個點的形式建立了乙個範圍,不包括指定的高值。
(1..5) #==> 1, 2, 3, 4,xvyvarm 5
(1...5) #==> 1, 2, 3, 4
('a'..'d') #==> 'a', 'b', 'c', 'd'
序列1..10xvyvarm0作為乙個range物件包含兩個fixnum的物件的引用。如果需要,可以將一系列的列表使用to_a方法。試試下面的例子:
#!/usr/bin/ruby
$, =", " # array value separator
range1 = (1..10).to_a
range2 = ('bar'..'bat').to_a
puts "#"
puts "#"
這將產生以下結果:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
bar, bas, bat
範圍實現方法,可在它們之間迭代並在各種不同的方式測試他們的內容:
#!/usr/bin/rubyxvyvarm
# assume a range
digits = 0..9
puts digits.include?(5)
ret = digits.min
puts "min value is #"
ret = digits.max
puts "max value is #"
ret = digits.reject
puts "rejected values are #"
digits.each do |digit|
puts "in loop #"
end這將產生以下結果:
true
min value is 0
max value is 9
rejected values are 5, 6, 7, 8, 9
in loop 0
in loop 1
in loop 2
in loop 3
in loop 4
in loop 5
in loop 6
in loop 7
in loop 8
in loop 9
作為條件的範圍:
範圍也可以使用作為條件表示式。例如,下面的**片段列印套行從標準輸入,每一組中的第一行包含單詞開始和結束的最後一行字:
while gets
print if /start/../end/
end範圍可以使用 case 語句:
#!/usr/bin/ruby
score = 70
result = case score
when 0..40: "fail"
when 41..60: "pass"
when 61..70: "pass with merit"
when 71..100:www.cppcns.com "pass with distinction"
else "invalid score"
endputs result
這將產生以下結果:
pass with merit
區間範圍:
最後乙個使用的全能型的範圍是為間隔測試:是否有某個值落在該區間的時間間隔內,這是使用 === 情況下相等操作。
#!/usr/bin/ruby
if ((1..10) === 5)
puts "5 lies in (1..10)"
endif (('a'..'j') === 'c')
puts "c lies in ('a'..'j')"
endif (('a'..'j') === 'z')
puts "z lies in ('a'..'j')"
end這將產生以下結果:
5 lies in (1..10)
c lies in ('a'..'j')
本文標題: 詳解ruby中範圍的概念
本文位址:
Ruby中的迭代器詳解
d瓜哥最近想做乙個 另外,老早就有學習一門動態語言的想程式設計客棧法,滿足著兩個條件的程式語言中,ruby python是最合適的兩種語言。現在ruby on rails如日中天,光芒萬丈!所以,就選定了ruby,從零開始學習。前天看了ruby的迭代器,對於我這個只學過j a c c 等的人來說,絕...
完美理解ruby中的yield的概念
大學裡常常發生佔位置的現象 頭天晚上拿一本書放在課座上,表示位置已經被佔了 第二天才來到這個座位上,翻開書正式上課.在這個現象中,書本 充當了 佔位符 的作用。在ruby語言中,yield是佔位符 先在前面的某部分 中用yield把位置佔著,然後才在後面的某個 塊 block 裡真正實現它,從而完成...
C Primer中的陌生概念四 範圍for語句
範圍for語句是c 11 新標準引入的一種更為簡單的for語句,用於遍歷容器或其他序列的所有元素。如下面的例子 vector v for auto r v for語句頭宣告了迴圈控制變數r,並把它和v關聯在一起,我們使用關鍵字auto令編譯器為r指定正確的型別。需要注意的是,上面的語句相當於 for...