リファクタリングしたい:
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
until ステートメントを使用した私のバージョンは機能しません。何故ですか?
リファクタリングしたい:
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
until ステートメントを使用した私のバージョンは機能しません。何故ですか?
のセマンティクスはcommand unless condition
と同等command if !condition
です。if
コマンドは、条件が真の場合にコマンドが実行される式とは対照的に、条件が論理的に偽の場合にのみ実行されます。
あなたの例は、そうでない限り、次を使用して翻訳できます。
def play_as_dealer
unless value >= 16
hit!(deck)
play_as_dealer
end
end
あなたの例では、式のインライン バージョンを使用しています。このunless
制限は、その行の前の式にのみ影響します。2 つ以上のコマンドを制限する必要がある場合は、上記の例のフォームを使用してください。
if が機能している場合を除き、なぜリファクタリングしたいのか疑問に思います...
ただし、この場合、unless構文は正しくありません。if-else-end とほとんど同じです。
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