(一)条件判断
条件判断为基本式:
if expression code end
if expression1 code1 elsif expression2 code2 else code3 end
对于if判断来说,它可以返回执行代码后的值。
与if条件类似,还有unless判断,它和if相反。
在C#中,多分支语句有个switch case开关,在ruby中,则是case when。case when非常灵活。
(二)循环
循环条件是while do或until do,而位于它们之间的是循环体。
现条件if相似,循环语句也可以用分界符的形式做紧凑循环,这时,省略了换行符和end。
x=1 puts x,x+=1 while x<10 while x<20 do puts x x+=1 end
for var in collection do code end
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
(三)迭代器和枚举
除了循环控制while、for、until外,有种特殊的方法用于循环,也就是迭代器,它是ruby最重要的特性之一。
(1)数值迭代器
upto:为一个区间内的所有整数调用其关联的代码块。左边为起始,右边为结束。
downto:与upto相反。
times:调用关系的代码一定的次数,且把0到n-1传递给代码。
step:以一定的步长,迭代增加到指定数值。第二个参数为步长。
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} "}
a1=[1,2,3] a2=a1.map{|x| x+1} a3=a2.collect{|x| x+1} print a2,a3 #o偶数 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