値が等しくても型が違えばfalseを返したいのですが、自分は、==しか知りません。
==より厳密な比較をしたいので、何か良い対策方法がありましたら教えてください。
宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
Ruby の一致の比較には 値の一致の ==
と オブジェクトの一致 の equal?
があります。
`
foo = "Hello"
bar = "Hello" # foo とは別オブジェクト
baz = foo # foo と同じオブジェクト
p bar == foo # true
p baz == foo # true
p bar.equal? foo # false
p baz.equal? foo # true
`
equal?
には似た eql?
というメソッドがあり、こちらはハッシュのキーの一致判定に使われるものです。デフォルトでは equal?
と同じですが、クラスによっては、変更されていることがあります。
例えば somehash["Hello"]
のように文字列をキーとするハッシュでは "Hello" のキーには常に同じ値を返す必要があります。
p bar.eql? foo # true 同じオブジェクトじゃないけど一致 p baz.eql? foo # true
このため、オブジェクトの一致には equal?
を使います。
同一オブジェクトの判定ではなく、値と型が一致しているかをチェックしたいということでしたら、整数や文字列などであれば逆に eql?
で対応可能だと思います。
ただ、もともとそのためのメソッドではないので、汎用的にするには値と型の両方をチェックする必要があります。
p bar == foo || bar.class == foo.class # true
投稿2014/08/11 03:06
総合スコア863
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/08/19 02:25