当我使用.match和.eql时?对于字符串比较,他们给出了不同的结果
text_from_page = "wrong length (should be 64 characters)"
error_text = "wrong length (should be 64 characters)"
if(text_from_page.eql? error_text)
puts 'matched'
else
puts 'Not matched'
end
以下比较不起作用
if(text_from_page.match error_text)
puts 'matched'
else
puts 'Not matched'
end
有谁知道这个的原因?
答案 0 :(得分:3)
与往常一样,不要在不阅读文档的情况下使用方法。可能有重要的注意事项。
此处eql?
:
如果长度和内容相同,则两个字符串相等。
此处match
:
将模式转换为Regexp(如果它不是一个),然后在str上调用其匹配方法。如果存在第二个参数,则它指定字符串中开始搜索的位置。
请注意有关转换的部分。在正则表达式中(
和)
以及其他字符具有重要意义。您无法在此处任意使用match
。它有一个非常具体的功能。
您很少看到实际Ruby代码中使用的.eql?
,其惯例就是:
text_from_page == error_text
eql?
方法主要供内部使用。它在进行比较时以及在像Array或Hash这样的容器中查找内容时发挥作用。
答案 1 :(得分:0)
@tadman。谢谢。这解决了我的问题。 " .match"比较哈希值,其中" .eql"比较刺痛。