Rails:我可以将多个值传递给include方法吗?

时间:2014-02-25 13:11:22

标签: ruby-on-rails methods

所以

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

但我宁愿简短而简洁。

2 个答案:

答案 0 :(得分:2)

您应该使用regexp:

!! (shout =~ /(gabba|nothing)/)

/(gabba|nothing)/是匹配'gabba'或'nothing'的正则表达式

=~返回字符串中正则表达式的位置(如果找到)

!!确保操作结果为truefalse

答案 1 :(得分:1)

基本上,你不能。

你尝试了什么:

shout.include?('gabba' || 'nothing')

相当于

shout.include?('gabba')

,因为

'gabba' || 'nothing'
# => 'gabba'

这就是||运算符在Ruby中的工作方式。它返回第一个操作数,除非它是falsenil。否则,它返回第二个操作数。由于您的第一个操作数是'gabba'字符串,因此它将被返回。