现在,我需要在
中编写逻辑if STR.include? "week" or STR.include? "precourse" or STR.include? "hi"
do somthing
end
还有更优雅的方式吗?
答案 0 :(得分:2)
您可以通过将令牌放入数组并使用reduce累积是否可以在STR
中找到任何内容来消除重复的包含检查:
tokens = ['week', 'precourse', 'hi']
do_thing if tokens.reduce(false) {|y, v| y || STR.include?(v) }
说明:
do_thing if tokens.reduce(false) {|y, v| y || STR.include?(v) }
^ ^ ^ ^ ^
a b c d e
false
y
;它收集每个包含检查的结果v
;它是我们传递给include?
OR
累计值与当前令牌调用STR.include?
的结果答案 1 :(得分:0)
它是什么语言?
恕我直言,带有一些论点的if语句可能是唯一的方法。
我会在java中做什么。
String something = "Pizza Pie";
if (something.contains("Pizza") || something.contains("Pie")) {
System.out.println("Yarp");
}
答案 2 :(得分:0)
还有更优雅的方式吗?
是的,但这取决于str
变量中的内容。
因为您使用的是include?
而不是==
,所以这可能不适合您:
if ['week', 'precourse', 'hi'].include? str
str
必须是数组中的其中一项。
但如果str
比数组中的项目长,则可以执行以下操作:
if str.match /week|precourse|hi/
为了避免在你的正则表达式中对这些字符串进行硬编码,你可能会有点麻烦:
target_strs = %w{ week precourse hi }
p target_strs #=> ["week", "precourse", "hi"]
str = "Hello and hi"
if str[ Regexp.union(target_strs) ] #=> str[ /week|precourse|hi/ ]
puts 'yes'
end
--output:--
["week", "precourse", "hi"]
yes
使用正则表达式时,请参阅字符串#[]的文档:http://www.ruby-doc.org/core-2.1.2/String.html#method-i-5B-5D
你做的方式没有错,而且阅读起来也比较容易。 :)