Rubyでスクリプト上で同一判定を行う方法についてお聞きしたいのですが、
どうすればできますでしょうか?
どなたか良い方法を知っている方いましたら教えていただけないでしょうか?
宜しくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
同一判定のためにはオブジェクトの比較演算子(メソッド)を使います。
まずは次の 2 つを覚えておいた方がいいです。
== : 値が一致
lang
1p 'foo' == 'foo' # true 2p 1.0 == 1 # true
equal? : オブジェクトが一致
lang
1p 'foo'.equal?('foo') # false 2 3a = b = 'foo' 4p a.equal?(b) # true
普通に使う分にはそれほど意識する必要がありませんが、 Ruby では自然な記述をするための特殊な比較演算子がもう 2 つあります。
eql? : ハッシュのキーの一致判定
デフォルト(Object クラス)では equal?
と同じです。
ただ、例えば a['foo']
の場合、キーが'foo' であれば、同じ値を返してもらいたいです。
そのため、 String クラスでは eql?
をオーバーライドしています。
lang
1a = {'foo' => :val1, 1 => :val2 } 2 3p a['foo'] # :val1 4 # equal? のままなら nil になる 5p a[1.0] # nil 6 # == と同じだとすると :val2 になる
=== : case 文での一致判定
こちらもデフォルトでは equal?
と同じです。
case
文を使いやすくするためにオーバーライドされます。
lang
1# 数値と範囲オブジェクトの一致判定 2age = 12 3case age 4when 0 .. 2 5 "baby" 6when 3 .. 19 7 "child" 8else 9 "adult" 10end 11 12 13str = "RubyOnRalis" 14case str 15# 文字列と正規表現との一致判定 16when /ruby(?!\s*on\s*rails)/i 17 "hit! #{arg}" 18# クラスとの一致判定 19when String 20 "Instance of String class. But don't hit." 21else 22 "unknown" 23end
また、以前にも近い質問があったので、そちらも見てみるとよいと思います。
投稿2014/10/21 16:47
総合スコア863
0
- ==
オブジェクトの内容が同じかどうかを調べるメソッドです。
Objectクラスの==
は、後述のequal?
メソッドと同じく同じオブジェクトかどうかを調べます。
通常の文字列比較や数値比較にはこれを用いればよいです。
ただし、文字列と数値の暗黙の型変換は行われないため、
1 == '1'
はfalse
になることに注意してください。
- equal?
同じオブジェクトかどうかを調べます。
JavaのStringクラスの==
と同じ動作ですね。
- ===
case式での比較に用いられます。
基本的には==
と同じ比較を行いますが、
Regexp
の場合はパターンマッチ、Range
の場合は範囲内にあるかどうか、Module
の場合はそのクラスに属するかどうかを調べます。
- eql?
ハッシュ内部で同じキーかどうかを調べます。
基本的に直接使うことはありません。
なお、Objectクラスのeql?
は、equal?
と同じ動作をします。
投稿2014/10/20 09:48
総合スコア1679
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
2とおりありますが、
object_idとequal?メソッドで可能です。
今回はequal?メソッドを使っての比較を紹介します。
ちなみに、equal?メソッドは、
2つのオブジェクトが同一かどうかを論理値で返します。
ここで注意してほしいのが、等しいかどうかではないということです。
一方で、等価演算子の説明ですが、
==は、2つのオブジェクトが等しいかどうかというのを判定します。
サンプルプログラムです。
lang
1p "sample" == "sample" #true 2 3"sample".equal? "sample" #false
投稿2014/10/20 07:30
総合スコア170
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。