为什么Ruby中没有`elsunless`语句?

时间:2013-12-09 12:09:07

标签: ruby language-design conditional-statements

Ruby提供unlesselsif语句。似乎很自然地假设会有类似的elsunless语句,但没有。这是否有特定的原因?

为了说明,这个陈述允许这样的代码。

unless broken
  # do something
elsunless done
  # do something else
end

我知道可以重写此代码以使用ifelsif,但在某些情况下使用unless会更清楚。

2 个答案:

答案 0 :(得分:5)

if / else语句背后的逻辑通常是:

有一个例外:

if exception_a
  # do exception stuff
else
  # do standard stuff
end

unless exception_a
  # do standard stuff
else
  # do exception stuff
end

在这种情况下添加unless非常有用,因为您可以切换代码。我对unless的喜爱之处在于,您可以在检查异常时单独执行标准操作。 (可以省略else块)

有多个例外:

这是棘手的部分:

if exception_a
  # do exception stuff a
elsif exception_b
  # do exception stuff b
else
  # do standard stuff
end

unless exception_a
  # do standard stuff
elsunless exception_b
  # do ???
else
  # do exception stuff
end

除了完全不可读之外,我找不到elsunless块的逻辑含义:你会在那里放什么代码?我仍然不知道这是不是一些例外或标准代码。

也许您可以进一步解释在这样的块中使用的代码。

答案 1 :(得分:2)

Ruby已经提供了ifelseelsifunless,那么elsunless是否真的需要?它在代码中看起来像笨重的猛犸象。我认为 Matz 没有理由将该语句添加到ruby语法中。 此外,一些ruby编码器调查了一个ruby编码标准,该标准排除了unless语句的使用,该标准继承自 Perl

至于我,我会从语言中完全删除unless关键字。

查看styling guide