我目前正在阅读The Ruby Programming Language,我不确定如何正确阅读Ruby-esque if else语句。你能帮我在常规if-else语句中的第二个代码块中编写下面的ruby代码吗?
if some_condition
return x
else
return y
end
所以我不确定的红宝石代码就是这些。
minimum = if x < y then x else y end
max = x > y ? x : y
谢谢!
答案 0 :(得分:5)
你似乎有困难的两种形式都使用了Ruby的一个想法来自Functional Programming范例:即 Everything是一个表达式,因此返回一个值。对于条件语句来说甚至都是这样,这种语法像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
记住根和&amp;在试图理解他们的结构时,语言的遗产。 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