我正在学习Ruby和RoR,并注意到它不是使用
if !foo
ruby提供
unless foo
此外,而不是:
while !foo
我们有
until foo
来自C ++ / Java,当我阅读时,似乎只会让我感到困惑,除非/直到。看起来像是在ruby中编程很多的人除非/直到否定if / while?
这是我应该习惯的事情,还是你看到很多关于这个问题的差异?
谢谢!
答案 0 :(得分:5)
是的,使用unless condition
代替if !condition
是常见且惯用的。
unless foo
# ...
end
作为后期条件使用尤为常见:
# Bad
raise "Not Found" if !file_exists?(file_name)
# Good
raise "Not Found" unless file_exists?(file_name)
如有疑问,请按ruby-style-guide
答案 1 :(得分:5)
来自ruby style guide的语法部分:
除非对于负面条件(或控制流程||),否则不要超过。
# bad
do_something if !some_condition
# bad
do_something if not some_condition
# good
do_something unless some_condition
# another good option
some_condition || do_something
和
对于负面条件,请等到结束。
# bad
do_something while !some_condition
# good
do_something until some_condition