Rubyで文字列の同等性をテストするために常にこれを行います。
if mystring.eql?(yourstring)
puts "same"
else
puts "different"
end
これは、オブジェクトの同等性をテストせずにこれを行う正しい方法ですか?
内容に基づいて文字列をテストするための最も簡潔な方法を探しています。
括弧と疑問符があるので、これは少し不格好なようです。
回答:
http://www.techotopia.com/index.php/Ruby_String_Concatenation_and_Comparisonによると
どちらかを行う
mystring == yourstring
または
mystring.eql? yourstring
同等です。
あなたのコードサンプルはあなたのトピックの一部、すなわちシンボルを拡張しなかったので、質問の一部は答えられませんでした。
fooとbarの2つの文字列があり、両方が文字列または記号のいずれかである場合は、次のコマンドで同等性をテストできます。
foo.to_s == bar.to_s
既知のタイプのオペランドで文字列変換をスキップする方が少し効率的です。したがって、fooが常に文字列である場合
foo == bar.to_s
しかし、効率の向上は、発信者に代わって追加の作業を要求する価値がほとんどないことはほぼ間違いありません。
Ruby 2.2より前では、シンボルはガベージコレクションされないため、比較のために(文字列またはシンボルを使用して)制御されていない入力文字列をインターンすることは避けてください。リソースの枯渇によってサービス拒否攻撃を受ける可能性があります。シンボルの使用は、制御する値、つまりコード内のリテラル、および信頼できる構成プロパティに制限してください。
Ruby 2.2では、シンボルのガベージコレクションが導入されました。
foo.intern == bar.intern文字列のインターンは、シンボルから文字列を作成するよりも平均して効率的です。(特定の文字列が以前にインターンされている場合は、シンボルを返すだけです。)