Ruby提供unless
和elsif
语句。似乎很自然地假设会有类似的elsunless
语句,但没有。这是否有特定的原因?
为了说明,这个陈述允许这样的代码。
unless broken
# do something
elsunless done
# do something else
end
我知道可以重写此代码以使用if
和elsif
,但在某些情况下使用unless
会更清楚。
答案 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已经提供了if
,else
,elsif
和unless
,那么elsunless
是否真的需要?它在代码中看起来像笨重的猛犸象。我认为 Matz 没有理由将该语句添加到ruby语法中。
此外,一些ruby编码器调查了一个ruby编码标准,该标准排除了unless
语句的使用,该标准继承自 Perl 。
至于我,我会从语言中完全删除unless
关键字。