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 的 .
在 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 的