以下是2种表达方式一样。
if expression code end
if expression then #推荐这种形式 code end
expression的值不是false或nil,则code块将被执行。
需要注意:1)围绕expressions的圆括号是可选的(而且通常都不用),ruby使用换行符、分号或者关键字then对条件表达式和后续的内容进行分隔
2) 必须以end 作为结束。
例子
if data #if array exist data << x #append x to data else data = [x] #create a new array, that holds the value end #this is the end of the conditional
if expression_1 then code1 elseif expression_2 code2 ..... elseif expression_N code3 else code end
例子 (多种形式,最好使用同一种代码规范)个人认为then最好
if x==1 name = "one" elseif x==2 name = "two" elseif x==3 then name ="three" elseif x==4; name = "four" else name = "many" end
5.1.3 返回值
在大多数语言中if条件式是一个语句,但在ruby中一切都是表达式,包括那些被称为语句的控制结构。
if“语句”的返回值:为被执行代码中最后一个表达式的值,若没有任何执行代码则返回nil
name = if x==1 then "one" elseif x==2 then "two" elseif x==3 then "three" elseif x==4; then "four" else "many" end
5.1.2 修饰符if
code if expression
puts message if message #if message not nil, or false, print it
if修饰符的优先级很低,比赋值操作符还低
y = x.invert if x.respond_to ? :invert #if修饰符作用与整个赋值表达式,如果x没有名为invert的方法,那么不会有任何事情发生。
y = (x.invert if x.respond_to ? :invert) #if修饰符仅仅作用与方法调用,如果if没有invert方法,那么该修饰符表达式的值将为nil,然后这个值被赋给y.