Lar*_*off 2 ruby language-design conditional-statements
Ruby提供unless和elsif声明.似乎很自然地假设会有类似的elsunless陈述,但没有.这有什么特别的原因吗?
为了说明,这个语句允许这样的代码.
unless broken
# do something
elsunless done
# do something else
end
Run Code Online (Sandbox Code Playgroud)
我知道,这个代码可以被改写为使用if和elsif,但在使用某些情况下,unless更清晰.
if/ else语句背后的逻辑通常是:
有一个例外:
if exception_a
# do exception stuff
else
# do standard stuff
end
unless exception_a
# do standard stuff
else
# do exception stuff
end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
除了完全不可读之外,我找不到该elsunless块的逻辑含义:你会在那里放什么代码?我仍然不知道这是不是一些例外的东西或标准代码.
也许您可以进一步解释在这样的块中使用的代码.