流程控制 #
条件表达式 #
if #
if 语句使用 elsif
表示否则,注意缺了字母 e
x = 1
y = 2
if x > y
puts "#{x} is larger than #{y}"
elsif x < y
puts "#{x} is smaller than #{y}" # => 1 is smaller than 2
else
puts "#{x} is equal to #{y}"
end
布尔环境下空值会被解释为 false
empty = nil
if empty
puts 'not empty'
else
puts 'empty'
end
unless #
unless 等于 if 相反,即 false 进条件语句
unless x + y > 5
puts 'x'
else
puts 'y'
end
条件修辞符 #
格式
<code> <modifier> <condition>
例
puts 'x + y > 3' if x + y > 3
puts 'x + y < 3' unless x + y < 3
循环语句 #
For #
For 语句
nums = [1, 2, 3, 4, 5]
for n in nums
puts "for-in #{n}"
end
也可以通过 Range 对象实现基于索引的循环,左右都是闭区间
for n in (1..10).step(3)
puts "for-range #{n}" # 1 4 7 10
end
For-each 语句
nums.each do |n|
puts "each #{n}"
end
times
也可以用于进行循环。
3.times { |i| puts "times #{i}" }
While #
i = 0
while i < 3
puts "while #{i}"
i += 1
end
while 语句也支持条件修辞符
i = 0
puts i += 1 while i < 3
while 语句还有另一种形式
begin
puts i -= 1
end while i > 0
Until #
Until 可以看着 While 的相反
i = 6
num = 9
until i > num do
puts "Inside the loop i = #{i}"
i +=1
end
until 也支持修辞符
<code> until <condition>
除了以上形式还可以使用 begin..until
语句
begin
<code>
end until <condition>
Loop #
loop 可以用于进行无条件的循环
i = 0
loop do
i += 1
print "loop #{i}"
break if i > 5
end
Break 和 Next #
Break 用于终止循环,Next 用于进入下次循环
Break
for i in 1..5
if i == 3
break
end
puts i
end
Next
for i in 1..5
if i == 3
next
end
puts i
end
Break 和 Next 都支持条件修辞符
break if i == 3
next if i == 3
redo #
Redo 语句出现在循环中用于重新执行循环,Redo 语句不会检查循环条件而是直接运行
i = 0
while i < 3
puts "redo #{i}" # => 0 1 10
i+=1
if i == 2
i = 10
redo
end
end
case #
x = 5
case x
when 0..2
puts '0..2'
when 3..6
puts '3..6'
when 7..10
puts '7..10'
else
puts 'other'
end