我想重构:“除非”在Ruby中如何工作?
def play_as_dealer
if value < 16
hit!(deck)
play_as_dealer
end
end
到这个版本
def play_as_dealer
hit!(deck) unless value > 16
play_as_dealer
end
我与除非报表版本无法正常工作。这是为什么?
我想重构:“除非”在Ruby中如何工作?
def play_as_dealer
if value < 16
hit!(deck)
play_as_dealer
end
end
到这个版本
def play_as_dealer
hit!(deck) unless value > 16
play_as_dealer
end
我与除非报表版本无法正常工作。这是为什么?
command unless condition
的语义相当于command if !condition
。当且仅当条件逻辑错误时才会执行命令,与if
表达式相反,如果条件为真,则会执行该命令。
def play_as_dealer
unless value >= 16
hit!(deck)
play_as_dealer
end
end
在您的例子中,你使用的是表达的内嵌版本,其中unless
限制只对在前面的表现效果:
您例如可以使用除非像这样被翻译线。如果您需要限制两个或更多命令,请使用上例中的表单。
我会问你为什么要与重构除非如果你的如果是工作...
但是,你除非语法是在这种情况下不正确 - 它是一样一样的一个if else-结束。
def play_as_dealer
unless value >= 16
hit!(deck)
play_as_dealer
end
end
如果你想块后的条件下,使用此:
def play_as_dealer
begin
hit!(deck)
play_as_dealer
end unless value >= 16
end
你打算会给'值== 16'不同的行为,以及你打算无条件调用'play_as_dealer'? (也就是说,为了缓存直到你用完堆栈?) – willglynn
而且,value <16'的逻辑相反是'value> = 16'。这不是你所拥有的。 – Derek
为什么?当前版本有什么问题,它更易于阅读。 – Yule