Ruby 中条件条件下的布尔运算符 AND 和 OR 之间没有区别

No Difference Between Boolean Operators AND and OR in Case Conditional in Ruby

在 Ruby 条件条件中,我看不出布尔运算符 AND 和 OR 之间的实际区别。

比如我想让用户输入句子:

sudo make me a sandwich

而案例条件开始如下:

case user_selection
when /sudo/ && /sandwich/

但是,如果用户输入:

make me a sandwich

条件满足。

在这种情况下,我的解决方法是重新排序条件:

case user_selection
when /sandwich/ && /sudo/

但这预先假设每次用户想要使用 "sudo" 时,他们都会在响应中包含字符串 "sandwich"。但是,这在功能上与此没有什么不同:

case user_selection
when /sudo/

我查找了 Ruby 条件的布尔运算符,但没有找到满意的答案。

您不能在这样的 case 块中使用 &&,因为 when /sudo/ && /sandwich/ 的计算结果仅为 when /sandwich/

相反,您需要使用 one 正则表达式来查找这两个词。一个简单的例子可能是:

case user_selection
when /sudo.*sandwich/

仅供参考

如果您绝对需要在您的 case 语句中使用逻辑 AND,您可以使用 lambda :

def answer(order)
  case order
  when ->(x) { x =~ /sudo/ && x =~ /sandwich/ }
    puts 'Okay'
  else
    puts 'Do it yourself!'
  end
end

answer 'make me a sandwich'
#=> Do it yourself!
answer 'sudo sing a song'
#=> Do it yourself!
answer 'sudo make me a sandwich'
#=> Okay

如果您可以将布尔逻辑压缩为单个检查(例如使用正则表达式),您可能应该这样做,就像@spickermann 的 .