我是Ruby新手。有没有更好的写法:
if (mystring.include? "string1") || (mystring.include? "string2") ||
(mystring.include? "string3")
可以,如下:
if %w(string1 string2 string3).any? { |s| my_string.include? s }
# your code
end
下面是文档:Enumerable#any?
将集合中的每个元素传递给给定的块。如果块返回的值不是false或nil,则该方法返回
true
。如果块没有给出,Ruby添加一个隐式块{ |obj| obj }
,将导致任何?如果集合中至少有一个成员不是false
或nil
,则返回true。
这是另一种方法(更快):
[13] pry(main)> ary = %w(string1 string2 string3)
=> ["string1", "string2", "string3"]
[14] pry(main)> Regexp.union(ary)
=> /string1|string2|string3/
[15] pry(main)> "abbcstring2"[Regexp.union(ary)]
=> "string2"
[16] pry(main)> "abbcstring"[Regexp.union(ary)]
=> nil
只看Regexp::union
和str[regexp] → new_str or nil
。
好吧,你总是可以在这里使用正则表达式(冒另一个jwz引号:)
if mystring =~ /string1|string2|string3/
...
end