重複の可能性:
Ruby で同じ変数をテストするためのエレガントな連鎖「or」
answer="this" or answer = "that"
言葉が多い
もっと似た式を使用できるようにしたいのですが、answer =("this" or that")
その式を使用できないことがわかっているのでor
、(真または偽)結果が答えと比較されるので、それは私が望むものではありません。=~ [a/c] のようなものですが、補間が必要です。
重複の可能性:
Ruby で同じ変数をテストするためのエレガントな連鎖「or」
answer="this" or answer = "that"
言葉が多い
もっと似た式を使用できるようにしたいのですが、answer =("this" or that")
その式を使用できないことがわかっているのでor
、(真または偽)結果が答えと比較されるので、それは私が望むものではありません。=~ [a/c] のようなものですが、補間が必要です。
(割り当て)==
ではなく(等価比較)を意味していると思います。=
その場合は、状況に応じて、次のいずれかを実行できます。
if [this, that].include? answer
# or #
case answer
when this, that
# do something
end
チェックしたいオプションのセットが多数ある場合は後者の方が適していますが、関心のあるオプションのセットが 1 つしかない場合は前者の方が読みやすくなります。名前付き変数なので、より似たようなものになりますif right_answers.include? answer
. そうすれば、読みやすく、保守が容易になります.)
正規表現を使用することもできます:
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
実際には、 this || that
TRUE または 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」と評価されることを除いて、式は実際に機能します。