ruby string comparisons .match vs .eql?

时间:2017-02-28 19:23:16

标签: ruby

当我使用.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

有谁知道这个的原因?

2 个答案:

答案 0 :(得分:3)

与往常一样,不要在不阅读文档的情况下使用方法。可能有重要的注意事项。

此处eql?

  

如果长度和内容相同,则两个字符串相等。

此处match

  

将模式转换为Regexp(如果它不是一个),然后在str上调用其匹配方法。如果存在第二个参数,则它指定字符串中开始搜索的位置。

请注意有关转换的部分。在正则表达式中()以及其他字符具有重要意义。您无法在此处任意使用match。它有一个非常具体的功能。

您很少看到实际Ruby代码中使用的.eql?,其惯例就是:

text_from_page == error_text

eql?方法主要供内部使用。它在进行比较时以及在像Array或Hash这样的容器中查找内容时发挥作用。

答案 1 :(得分:0)

@tadman。谢谢。这解决了我的问题。 " .match"比较哈希值,其中" .eql"比较刺痛。