0

可能重复:
优雅的链式“或”用于在 Ruby 中对同一变量进行测试

answer="this" or answer = "that"罗嗦

我希望能够使用更像的表达式,answer =("this" or that")但我知道我不能or在完成后使用该表达式,然后将(真或假)结果与答案进行比较,所以这不是我想要的。更像 a =~ [a/c] 但我需要插值。

4

3 回答 3

7

我假设您的意思是==(平等比较)而不是=(分配)。如果是这种情况,根据具体情况,您可以执行以下操作之一:

if [this, that].include? answer

# or #

case answer
when this, that
  # do something
end

后者更适合当您有许多要检查的选项集时,而前者在您只有一组您感兴趣的选项时更具可读性。(我通常会将选项粘贴在命名变量,所以它会更像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 || that实际上并不返回 TRUE 或 FALSE。它将返回第一项,除非该项为 'falsey'(false 或 nil,注意 "" 不是 false 或 nil),否则将返回第二项。因此,以下将起作用:

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”,因为“this”不是“假”。

于 2012-10-10T19:31:00.483 回答