2

我目前正在阅读The Ruby Programming Language,但我不确定如何正确阅读 Ruby 风格的 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  

谢谢!

4

1 回答 1

6

您似乎难以使用的两种形式都使用了 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
于 2012-04-22T23:32:11.277 回答