-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

until ステートメントを使用した私のバージョンは機能しません。何故ですか?

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制限は、その行の前の式にのみ影響します。2 つ以上のコマンドを制限する必要がある場合は、上記の例のフォームを使用してください。

于 2012-11-16T14:56:25.660 に答える
2

if が機能している場合を除き、なぜリファクタリングしたいのか疑問に思います...

ただし、この場合、unless構文は正しくありません。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 に答える