所以
shout = "gabba gabba hey"
当然可以
shout.include?("gabba")
=> true
shout.include?("nothing")
=> false
这也有效
shout.include?("gabba"||"nothing")
=> true
然而,这不是
shout.include?("nothing"||"gabba")
=> false
我很困惑。这个运算符根本不在包含中运行,在评估第一个值后是否停止,无论它返回true还是false,或者我只是缺少必要的东西?当然,我可以使用这个更长的代码
shout.include?("nothing") or shout.include?("gabba")
=> true
但我宁愿简短而简洁。
答案 0 :(得分:2)
您应该使用regexp:
!! (shout =~ /(gabba|nothing)/)
/(gabba|nothing)/
是匹配'gabba'或'nothing'的正则表达式
=~
返回字符串中正则表达式的位置(如果找到)
!!
确保操作结果为true
或false
答案 1 :(得分:1)
基本上,你不能。
你尝试了什么:
shout.include?('gabba' || 'nothing')
相当于
shout.include?('gabba')
,因为
'gabba' || 'nothing'
# => 'gabba'
这就是||
运算符在Ruby中的工作方式。它返回第一个操作数,除非它是false
或nil
。否则,它返回第二个操作数。由于您的第一个操作数是'gabba'
字符串,因此它将被返回。