“Ruby-esque”if else条件语句

时间:2012-04-22 23:29:44

标签: ruby

我目前正在阅读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  

谢谢!

1 个答案:

答案 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