您似乎难以使用的两种形式都使用了 Ruby 从函数式编程范式中获取的一个想法:即,一切都是表达式,因此返回一个值。甚至对于条件语句也是如此,像 Java 这样的语言并不真正支持这种想法(例如:
public boolean test() {
boolean x = if (1 > 2 ) { false; } else { true; };
return x;
}
只是在语法上无效)。
您可以在 Ruby 终端中看到:
will_be_assigned_nil = false if (1 > 2) # => nil
will_be_assigned_nil # => nil
所以,对于你的问题。第一个可以这样改写:
if x < y
mininum = x
else
minimum = y
end
第二种类似于其他语言中的三元运算符,相当于:
if x > y
max = x
else
max = y
end
在尝试理解语言的结构时,记住语言的根源和遗产是有帮助的。Ruby 与 Perl 共享“不止一种方法”的理念,惯用的 Ruby 代码通常高度强调优雅。
“后表达”式条件句就是一个很好的例子。如果我在我的方法开始时有保护表达式,我经常会这样写:
raise "Pre-condition x not met" unless x # (or "if !x" , preference thing)
raise "Pre-condition y not met" unless y # etc., etc.
代替
if !x
raise "Pre-condition x not met"
end
if !y
raise "Pre-condition y not met"
end