-1

我想重构:

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

我的带有除非语句的版本不起作用。这是为什么?

4

3 回答 3

8

的语义command unless condition等价于command if !condition。当且仅当条件在逻辑上为假时,if该命令才会执行,与表达式相反,在表达式中,如果条件为真,则将执行命令。

除非这样,否则您的示例可以翻译:

def play_as_dealer
  unless value >= 16
    hit!(deck)
    play_as_dealer
  end
end

在您的示例中,您使用的是表达式的内联版本,其中unless限制仅对该行中的前一个表达式产生影响。如果您需要限制两个或更多命令,请使用我上面示例中的表单。

于 2012-11-16T14:56:25.660 回答
2

我会质疑你为什么要重构除非如果你的 if 工作...

但是,在这种情况下,您的除非语法不正确 - 它与 if-else-end 非常相似。

def play_as_dealer
  unless value >= 16
    hit!(deck)
    play_as_dealer
  end
end
于 2012-11-16T14:50:20.043 回答
0

如果您想要块之后的条件,请使用:

def play_as_dealer
  begin
    hit!(deck) 
    play_as_dealer 
  end unless value >= 16
end
于 2012-11-16T17:16:15.963 回答