1

私のルビーコードには次のような単純な条件があります。

if user.text != ("Empty" || "Damaged")

何かをする...

それが「損傷」しているとき、それはまだループに入るので、私はこれを使わなければならないということです:

if user.text != "Empty"
    if user.text != "Damaged"
...
..

最初のものを機能させるための正しい構文は何ですか?ありがとう!

4

3 に答える 3

6

これを使って:

unless ["Empty", "Damaged"].include?(user.text)
  ...
end

最初のアプローチの問題は、次のことをa || b意味します。それがそうである場合a != nilaそうでない場合はですb。ご覧のとおり、変数がゼロになることはめったにないため、定数ではなく変数に適しています。あなたの表現("Empty" || "Damaged")は単にに等しい"Empty"

これを二項演算子として使用する場合、正しい形式は次のようになります。

if (user.text != "Empty") && (user.text != "Damaged")

上の解はちょうど短いです。避けたい要素の配列で構成されており、user.text存在しないかどうかを確認するだけです。

于 2012-08-26T17:15:49.537 に答える
2

@Matziには確かに正しい答えがあります。しかし、あなたがやっていることは失敗している理由です:

あなたのステートメント("Empty" || "Damaged")は「空」と評価されます

あなたは、これらのいずれか、最初に見つけた偽でないものを返すと言っています。Ruby では、任意の文字列、数値、またはオブジェクトが true を返すため、毎回 "Empty" を返します。

if ステートメントを本当に使用したい場合は、次のようにレイアウトすることをお勧めします。

if user.text != "Empty" && user.text != "Damaged"
  ...
end

ちなみに、「ユーザーテキストが破損していないか空でない場合」と言おうとしていると思います。

それが役立つことを願っています。

于 2012-08-26T17:28:45.577 に答える
0

if ((テキスト != "空") && (テキスト != "破損"))

于 2012-08-26T17:19:57.927 に答える