it-swarm-ja.tech

Ruby文字列または記号?

Rubyで文字列の等価性をテストするために、これを常に実行します。

if mystring.eql?(yourstring)
 puts "same"
else
 puts "different"
end

これは、オブジェクトの同等性をテストせずにこれを行う正しい方法ですか?

内容に基づいて文字列をテストする最も簡潔な方法を探しています。

括弧と疑問符があるため、これは少し不格好に思えます。

76
Bryan Locke

http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparison

いずれかを行う

mystring == yourstring

または

mystring.eql? yourstring

同等です。

132
JasonWyatt

コードサンプルがトピックの一部、つまりシンボルで展開されなかったため、質問の一部が未回答になりました。

Fooとbarの2つの文字列があり、両方とも文字列またはシンボルのいずれかである場合、次の式で同等性をテストできます。

foo.to_s == bar.to_s

型が既知のオペランドの文字列変換をスキップする方が少し効率的です。 fooが常に文字列の場合

foo == bar.to_s

しかし、効率の向上は、ほぼ確実に、発信者に代わって余分な作業を要求する価値はありません。

Ruby 2.2の前に、文字列またはシンボルを使用した比較のために制御されていない入力文字列をインターンしないでください。枯渇:シンボルの使用を、制御する値、つまりコード内のリテラル、および信頼できる構成プロパティに制限します。

Ruby 2.2 シンボルのガベージコレクションの導入

13
sheldonh