Ruby基礎知識之基本流程控制
(一)條件判斷
條件判斷為基本式:
if expression
code
end
表達式如果不是false或nil,則可執(zhí)行code部分,所以對于else來說,如果為false或nil,則else下的代碼是要執(zhí)行的。要注意的是表達式與執(zhí)行代碼之間要有分界符:例如換行或分號或是then關鍵字。
多條件分支情況下,除了可以用else if之外,可以用省略式:elsif
if expression1
code1
elsif expression2
code2
else
code3
end
如果通過then做為分界符:
if expression then code end,那么可以把if直接做為分界符:code if expression,這時,if稱為表達式修飾符。先寫執(zhí)行再寫執(zhí)行條件。要注意的是:如果成為表達式修飾符,則執(zhí)行代碼與if之間不能帶換行符。雖然這種方式也是一種條件句,但我覺得它更像一種修飾。
對于if判斷來說,它可以返回執(zhí)行代碼后的值。
與if條件類似,還有unless判斷,它和if相反。
在C#中,多分支語句有個switch case開關,在ruby中,則是case when。case when非常靈活。
(二)循環(huán)
循環(huán)條件是while do或until do,而位于它們之間的是循環(huán)體。
現(xiàn)條件if相似,循環(huán)語句也可以用分界符的形式做緊湊循環(huán),這時,省略了換行符和end。
x=1
puts x,x+=1 while x<10
while x<20 do
puts x
x+=1
end
在C#中有for循環(huán)應用非常廣泛,在ruby中,for循環(huán)與foreach的作用類似,用于對可枚舉對象進行迭代。
for var in collection do
code
end
其中collection是帶有each迭代方法的對象;do關鍵字可選(可以用換行符或分號替代)。
arr=%w[1 2 3 4 5 6]
for item in arr
print item<<" "
end
hash1={:a=>1,:b=>2,:c=>3}
for key,value in hash1
print "#{key}=#{value}"<<" "
end
(三)迭代器和枚舉
除了循環(huán)控制while、for、until外,有種特殊的方法用于循環(huán),也就是迭代器,它是ruby最重要的特性之一。
(1)數(shù)值迭代器
upto:為一個區(qū)間內的所有整數(shù)調用其關聯(lián)的代碼塊。左邊為起始,右邊為結束。
downto:與upto相反。
times:調用關系的代碼一定的次數(shù),且把0到n-1傳遞給代碼。
step:以一定的步長,迭代增加到指定數(shù)值。第二個參數(shù)為步長。
1.upto(5){|x|print "#{x} "}
puts
5.downto(1){|x|print "#{x} "}
puts
3.times{|x|print "#{x} "}
puts
3.step(5,0.5){|x|print "#{x} "}
(2)枚舉迭代器
each:將迭代元素傳遞給代碼。
collect:為調用它的枚舉的每個元素執(zhí)行關聯(lián)代碼后,組合到一起做為一個數(shù)組返回。
select:為調用它的枚舉的每個元素執(zhí)行關聯(lián)代碼后,如果為真,組合到一起做為一個數(shù)組返回。
reject:與select相反。它把為false或nil的元素做為一個數(shù)據(jù)返回。
inject:求累積值迭代。通過兩個參數(shù)調用關聯(lián)代碼塊,第一個參數(shù)是前次調用代碼塊的累積值,第二個參數(shù)指調用進行迭代的下一個元素。如果有傳遞參數(shù),則做為第一個參數(shù)的初始值,如果沒有,則把第一次進行迭代的元素值做為初始值。
a1=[1,2,3]
a2=a1.map{|x| x+1}
a3=a2.collect{|x| x+1}
print a2,a3
#o偶數(shù)
a5=a1.select{|x|x%2==0}
print a5
a6=a1.reject{|x|x%2==0}
print a6
puts
a7=a1.inject{|sum,x|x+sum}
puts a7
a8=a1.inject(10){|sum,x|x+sum}
puts a8
相關文章
Ruby中訪問SQL Server數(shù)據(jù)庫的配置實例
這篇文章主要介紹了Ruby中訪問SQL Server數(shù)據(jù)庫的配置實例,本文通過FreeTDS實現(xiàn),同時介紹了在ActiveRecord上使用Tiny_TDS的技巧,需要的朋友可以參考下2014-11-11
詳解Ruby中的instance_eval方法及其與class_eval的對比
Ruby的eval族方法將字符串作為代碼來執(zhí)行,instance_eval方法便是其中之一,下面就來詳解Ruby中的instance_eval方法及其與class_eval的對比2016-05-05
實例解析Ruby設計模式編程中Strategy策略模式的使用
這篇文章主要介紹了Ruby設計模式編程中Strategy策略模式的使用實例,Strategy模式在Ruby on Rails框架開發(fā)中也經(jīng)常用到,需要的朋友可以參考下2016-03-03
Rails bundle命令安裝mysql gem包出錯的解決方法
這篇文章主要介紹了Rails bundle命令安裝mysql gem包出錯的解決方法,本文原因是沒有安裝mysql開發(fā)包,需要的朋友可以參考下2014-08-08
Ruby中用線程實現(xiàn)經(jīng)典的生產(chǎn)者消費者問題代碼實例
這篇文章主要介紹了Ruby中用線程實現(xiàn)經(jīng)典的生產(chǎn)者消費者問題代碼實例,本文直接給出實現(xiàn)代碼和運行效果,需要的朋友可以參考下2015-01-01

