1. if

1.1 格式:

if conditional [then]
      code...
[elsif conditional [then]
      code...]...
[else
      code...]
end

if 表达式用于条件执行。值 false 和 nil 为假,其他值都为真。请注意,Ruby 使用 elsif,不是使用 else if 和 elif。

如果 conditional 为真,则执行 code。如果 conditional 不为真,则执行 else 子句中指定的 code

通常我们省略保留字 then 。若想在一行内写出完整的 if 式,则必须以 then 隔开条件式和程式区块。

1.2 if修饰符

格式

code if condition

if修饰词组表示当 if 右边之条件成立时才执行 if 左边的式子。即如果 conditional 为真,则执行 code

1.3 unless语句

格式:

unless conditional [then]
   code
else
   code 
end

unless式和 if式作用相反,即如果 conditional 为假,则执行 code。如果 conditional 为真,则执行 else 子句中指定的 code

1.4 unless修饰符

code unless conditional

如果 conditional 为假,则执行 code

1.5 case语句

case expression
[when expression [, expression ...] [then]
   code ]...
[else
   code ]
end

case先对一个 expression 进行匹配判断,然后根据匹配结果进行分支选择。

它使用 ===运算符比较 when 指定的 expression,若一致的话就执行 when 部分的内容。

通常我们省略保留字 then 。若想在一行内写出完整的 when 式,则必须以 then 隔开条件式和程式区块。

2.循环

2.1 while do

while conditional [do] #或者[:]
     code
end

当 conditional 为真时,执行 code

语法中 do 或 : 可以省略不写。但若要在一行内写出 while 式,则必须以 do 或 : 隔开条件式或程式区块。

2.2 while修饰符 相当于 do while

code while condition
 
或者
 
begin 
  code 
end while conditional

当 conditional 为真时,执行 code

如果 while 修饰符跟在一个没有 rescue 或 ensure 子句的 begin 语句后面,code 会在 conditional 判断之前执行一次。

2.3 until 语句

until conditional [do]
   code
end

当 conditional 为假时,执行 code

语法中 do 可以省略不写。但若要在一行内写出 until 式,则必须以 do 隔开条件式或程式区块。

2.4 until修饰循环

code until conditional
 
或者
 
begin
   code
end until conditional

当 conditional 为 false 时,执行 code

如果 until 修饰符跟在一个没有 rescue 或 ensure 子句的 begin 语句后面,code 会在 conditional 判断之前执行一次。

3. for 语句

for variable [, variable ...] in expression [do]
   code
end

for...in 循环几乎是完全等价于:

(expression).each do |variable[, variable...]| code end

4.break 终止最内部的循环。如果在块内调用,则终止相关块的方法(方法返回 nil)。

5. next 类似于c的continue

6.redo  重新开始最内部循环的该次迭代,不检查循环条件。如果在块内调用,则重新开始 yield 或 call

7. retry(1.9之后不支持)

如果 retry 出现在 begin 表达式的 rescue 子句中,则从 begin 主体的开头重新开始。

如果 retry 出现在迭代内、块内或者 for 表达式的主体内,则重新开始迭代调用。迭代的参数会重新评估。