流程控制

流程控制 #

条件表达式 #

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
沪ICP备17055033号-2