質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

1593閲覧

Ruby スクリプト上で同一判定を行う方法

takuya_126

総合スコア18

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2014/10/19 00:06

Rubyでスクリプト上で同一判定を行う方法についてお聞きしたいのですが、
どうすればできますでしょうか?
どなたか良い方法を知っている方いましたら教えていただけないでしょうか?
宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

yohshiy

総合スコア863

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

  • ==

オブジェクトの内容が同じかどうかを調べるメソッドです。
Objectクラスの==は、後述のequal?メソッドと同じく同じオブジェクトかどうかを調べます。
通常の文字列比較や数値比較にはこれを用いればよいです。
ただし、文字列と数値の暗黙の型変換は行われないため、
1 == '1'falseになることに注意してください。

  • equal?

同じオブジェクトかどうかを調べます。
JavaのStringクラスの==と同じ動作ですね。

  • ===

case式での比較に用いられます。
基本的には==と同じ比較を行いますが、
Regexpの場合はパターンマッチ、Rangeの場合は範囲内にあるかどうか、Moduleの場合はそのクラスに属するかどうかを調べます。

  • eql?

ハッシュ内部で同じキーかどうかを調べます。
基本的に直接使うことはありません。
なお、Objectクラスのeql?は、equal?と同じ動作をします。

投稿2014/10/20 09:48

k.tada

総合スコア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

ringo

総合スコア170

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問