同等性を実装してRubyで2つのオブジェクトを比較する方法
平等とは、2つのことが同じであることを意味します。 Rubyでは、オブジェクトとその値を比較して、それらが同じオブジェクトであるかどうかを確認します。
質問は…
Rubyで2つのことをどのように比較しますか?
このように :
1 == 1 # true
あなたはおそらくこれにすでに精通しているでしょう…
しかし、==
であることをご存知でしたか 構文だけでなくメソッドですか?
影響は大きいです。
このメソッドを独自のクラスに実装して、クラスをより強力にすることができます。そして、それがこの投稿で学ぶことです!
2つのオブジェクトを同じにする理由
次のように2つの文字列を比較できます:
"foo" == "foo"
単語と文字の場合 同じなら、同じです。
式はtrue
を返します 。
これは、String
が機能するために機能します クラスは==
を実装します (2つの等号)文字列を比較する方法を知っている方法。
しかし、String
の場合はどうなりますか? ==
を実装しませんでした ?
次に、RubyはObject
を使用します の==
の実装 、デフォルトでは、オブジェクトの内容ではなく、オブジェクトのIDをテストします。
例 :
Object.new == Object.new # false String.new == String.new # true
Object
の理由 false
を返します 2つの新しいオブジェクトのオブジェクトIDが異なるためです。
String
の場合 、内容に基づいて比較し、2つの新しい文字列が同じ内容(空)であるため、true
を返します。 。
平等の実施
次に、学習した内容を使用して、クラスを比較できるようにすることで、独自のクラスをより強力にします。
==
に感謝します メソッド…
自分のクラスの2つのインスタンスが等しいことの意味を正確に定義できます。
例 :
class Product attr_reader :name, :price def initialize(name, price) @name, @price = name, price end def ==(other) self.name == other.name && self.price == other.price end end p1 = Product.new('book', 49) p2 = Product.new('book', 49) p1 == p2 # true
==
メソッドは、名前と価格の両方が2つのProduct
で同じでなければならないことを示しています 等しいと見なされるオブジェクト。
覚えておいてください :
このメソッドを実装しない場合(またはComparable
を使用する場合 モジュール(Rubyの本で説明しています)2つのオブジェクトは、値ではなくオブジェクトIDを使用して比較されます。
また、Structを使用する場合は、すでに==
が実装されていることにも言及しておく必要があります。 あなたのために。
トリプルイコールはどうですか?
==
かどうか疑問に思われるかもしれません はメソッドであり、は===
また方法?そして答えはイエスです🙂
では、この2つの違いは何ですか?
Javascriptには明らかな違いがあり、==
オブジェクトタイプが同じでない場合は、同じになるように変換しようとします(1
vs '1'
)。そして===
「厳密な」平等のためです。
しかし、Rubyにはそのようなことはありません。 ===
とは つまり、それを実装するクラスによって異なります。
多くの場合、これは==
の単なるエイリアスです。 。
String
のように およびObject
。
===
を提供する組み込みクラスの表を次に示します。 特別な意味:
objが範囲の要素である場合はtrueを返し、そうでない場合はfalseを返します。 | |
正規表現 | |
objがmodのインスタンス、またはmodの子孫の1つのインスタンスである場合はtrueを返します。 | |
手順 | Proc#call のように、procのパラメータとしてobjを使用してブロックを呼び出します 。これは、procオブジェクトをwhen のターゲットにできるようにするためです。 caseステートメントの句。 |
結論
この投稿では、==
を実装してクラスをより強力にする方法を学びました。 方法。 ==
の違いも学びました および===
。
この投稿を共有することを忘れないでください より多くの人がそれを見ることができます🙂
-
iPhone / iOSで2つのNSDateを比較するにはどうすればよいですか?
この記事では、2つのNSDateをすばやく比較する方法を説明します。まず、2つのNSDateを作成する必要があります。 今回はシミュレーターではなく遊び場で行います。 まず、2つの異なる日付を作成しましょう。 let dateOne = NSDateComponents() dateOne.day = 5 dateOne.month = 6 dateOne.year = 1993 let dateTwo = NSDateComponents() dateTwo.day = 4 dateTwo.month = 2 dateTwo.year = 1995 これらの日付コンポーネントを使用して、
-
Ruby Freezeメソッド–オブジェクトの可変性を理解する
オブジェクトが可変であるとはどういう意味ですか? 派手な言葉で混乱させないでください。「可変性 」は、オブジェクトの内部状態を変更できることを意味します。これは、凍結されたオブジェクトを除く、すべてのオブジェクトのデフォルトです。 、または特別なオブジェクトのリストの一部であるもの。 つまり、Rubyのすべてのオブジェクトが変更可能というわけではありません! 例 : 数字や記号、さらにはtrueには意味がありません またはfalse (オブジェクトでもあります)変更します。 数字の1は常に1になります。 ただし、他のオブジェクト、特に配列オブジェクトやハッシュオブジェクトなどのデー