2017-02-28 1 views
1

私は.matchと.eqlを使用しましたか?文字列の比較のために、彼らは異なる結果にルビーストリングの比較.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 

誰もがその理由を知っていますが動作しませんでしたか?

答えて

3

いつものように、ドキュメントを読まずにメソッドを使用するだけではありません。重要なメモがあります。

はここeql?です:彼らは同じ長さと内容を持っている場合

2つの文字列が等しいです。

がここにmatchです:(それはすでにない場合)

が正規表現にパターンを変換し、その後、strについて、その試合のメソッドを呼び出します。 2番目のパラメータが存在する場合は、検索を開始する文字列内の位置を指定します。

の部分には、に変換されます。正規表現では、()などが重要な意味を持ちます。ここにはmatchを任意に使用することはできません。それは非常に特殊な機能を持っています。

text_from_page == error_text 

eql?方法は主に内部使用のために意図されて:あなたはめったに実際のRubyコードで使用.eql?見ない

は、規則は単にこれです。これは、比較や配列やハッシュのようなコンテナ内のものを見つけるときに機能します。

0

@tadman。ありがとうございました。それが私の問題を解決しました。 ".match"は、 ".eql"がスティングを比較するときのハッシュ値を比較します。