0

重複の可能性:
Ruby で同じ変数をテストするためのエレガントな連鎖「or」

answer="this" or answer = "that"言葉が多い

もっと似た式を使用できるようにしたいのですが、answer =("this" or that")その式を使用できないことがわかっているのでor、(真または偽)結果が答えと比較されるので、それは私が望むものではありません。=~ [a/c] のようなものですが、補間が必要です。

4

3 に答える 3

7

(割り当て)==ではなく(等価比較)を意味していると思います。=その場合は、状況に応じて、次のいずれかを実行できます。

if [this, that].include? answer

# or #

case answer
when this, that
  # do something
end

チェックしたいオプションのセットが多数ある場合は後者の方が適していますが、関心のあるオプションのセットが 1 つしかない場合は前者の方が読みやすくなります。名前付き変数なので、より似たようなものになりますif right_answers.include? answer. そうすれば、読みやすく、保守が容易になります.)

于 2012-10-10T18:38:15.113 に答える
2

正規表現を使用することもできます:

answer = 'this'
true if answer =~ /th[is|at]/
=> true

answer = 'that'
true if answer =~ /th[is|at]/
=> true

answer = 'blah'
true if answer =~ /th[is|at]/
=> nil
于 2012-10-10T21:20:21.303 に答える
0

実際には、 this || thatTRUE または FALSE は返されません。項目が 'falsey' (false または nil、"" は false でも nil でもないことに注意) でない限り、最初の項目を返します。それ以外の場合は、2 番目の項目を返します。したがって、次のように動作します。

foo = nil
bar = "that"
baz = ""
qux = false

answer = foo || bar # => "that"
answer = bar || foo # => "that"
answer = baz || bar # => ""
answer = foo || qux # => false
answer = qux || foo # => nil

したがって、実際にはanswer =("this" or that")、「this」は「falsey」ではないため、常に「this」と評価されることを除いて、式は実際に機能します。

于 2012-10-10T19:31:00.483 に答える