【Ruby3.x】Set::compare_by_identity?()メソッドの使い方
compare_by_identity?メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
compare_by_identity?メソッドは、Setオブジェクトがその要素の同一性をどのように比較するかを確認するメソッドです。このメソッドは、Setが要素の比較にオブジェクトの同一性、つまりオブジェクトのobject_idを使用しているかどうかを真偽値で返します。
戻り値がtrueの場合、Setは要素の比較に各オブジェクトのobject_idを使用します。これは、たとえオブジェクトの内容が完全に同じであっても、メモリ上で異なる場所にあるインスタンスであれば、Set内では別々の要素として扱われることを意味します。このモードは、厳密なオブジェクトの同一性を求めるときに有用です。
一方、戻り値がfalseの場合、Setは要素の比較に==演算子を使用して値の等価性を判断します。この場合、オブジェクトの内容が同じであれば、たとえ異なるインスタンスであっても同じ要素として扱われます。例えば、"hello"という文字列を二つ作成した場合、それぞれが異なるオブジェクトであっても、内容が同じであるためSetでは一つの要素として扱われます。RubyのSetオブジェクトはデフォルトでこの==演算子による比較を採用しており、compare_by_identity?メソッドは通常falseを返します。
このメソッドは、SetがオブジェクトIDによる比較モードであるかを確認する際に利用されます。compare_by_identityメソッドを使ってSetの比較モードをオブジェクトIDベースに切り替えた場合に、現在の状態をプログラムで確認するのに役立ちます。
構文(syntax)
1require 'set' 2 3my_set = Set.new 4my_set.compare_by_identity?
引数(parameters)
引数なし
引数はありません
戻り値(return)
Boolean
Set オブジェクトが要素の同一性(オブジェクトID)で比較されるかどうかの真偽値を返します。true の場合は同一性で比較され、false の場合はデフォルトの比較(eql? と hash)で比較されます。