如何解决Ruby &&运算符的结果没有意义
| 这是我的代码:>> x = \"apple spoon\"
=> \"apple spoon\"
>> y = \"spoon tree\"
=> \"spoon tree\"
>> z = \"apple tree\"
=> \"apple tree\"
>> puts \"match\" if x.upcase.match(\"APPLE\" && \"SPOON\" && \"TREE\")
=> nil
>> puts \"match\" if y.upcase.match(\"APPLE\" && \"SPOON\" && \"TREE\")
match
=> nil
>> puts \"match\" if z.upcase.match(\"APPLE\" && \"SPOON\" && \"TREE\")
match
=> nil
我期望发生的一切根本没有任何匹配。为什么我在y和z上得到匹配?
解决方法
如dmarkow所说,&&运算符用于布尔运算,而不是给match()提供多个参数。
如果需要查找它是否与任何字符串匹配,请使用某种迭代器,例如:
puts \"MATCH\" if [\"TREE\",\"SPOON\"].any? {|t| z.upcase.match(t)}
另外,由于String#match接受正则表达式,所以我认为您可以执行不区分大小写的正则表达式:
puts \"MATCH\" if [\"TReE\",\"SPoOn\"].any? {|t| z.match(/#{t}/i)}
或者您可以:
puts \"MATCH\" if z.match(/(tree|spoon)/i)
既然您说过要匹配所有字词:
puts \"MATCH\" if [\"TReE\",\"SPoOn\"].all? {|t| z.match(/#{t}/i)}
如果正则表达式使您感到困惑,并且您想先大写:
puts \"MATCH\" if [\"TREE\",\"SPOON\"].all? {|t| z.upcase.match(t)}
, &&
语句将返回false或该语句的最后一个值:
false && \"SPOON\"
# => false
\"TREE\" && \"SPOON\"
# => \"SPOON\"
因此,实际上,您的陈述与以下陈述相同:
puts \"match\" if y.upcase.match(\"TREE\")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。