Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Object#eql?の実行例を追記し、既存の例を再定義の例として明示する #2921

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

j-o-lantern0422
Copy link

Object#eql? の記述に誤りがありそうなので、修正を提案します。
equal? はオブジェクトの同一性の比較ですが、 eql? はオブジェクトの同値性を比較しているようです。

$ ruby -v 
ruby 3.3.2 (2024-05-30 revision e5a195edf6) [arm64-darwin23]

$ ruby -e "puts 'hoge'.eql?('hoge')"
true

$ ruby -e "puts 'hoge'.eql?('fuga')"
false

equal? との比較

$ ruby -e "puts 'hoge'.equal?('hoge')"                                                                                                                                                                                                                                                                                                                                                                                           
false

$ ruby -e "hoge = 'hoge'; puts hoge.equal?(hoge)"
true

間違えていたらすいません 🙏

@znz
Copy link
Member

znz commented Nov 28, 2024

それで動作確認しているのは String#eql? なので、 Object#eql? の動作確認になっていないようです。

https://docs.ruby-lang.org/ja/latest/method/String/i/eql=3f.html

$ ruby -e 'p "hoge".method(:eql?)'
#<Method: String#eql?(_)>
$ ruby -e 'o = Object.new; p o.method(:eql?); p o.eql?(o); p o.eql?(Object.new)'
#<Method: Object(Kernel)#eql?(_)>
true
false

https://docs.ruby-lang.org/ja/latest/method/Object/i/eql=3f.html の実行例が String#eql?Integer(Numeric)#eql? の例だけで Object#eql? の例がないので、 Object#eql? の例を追加して、今の例は適切に再定義されている例だと明記するのが良いかもしれません。

@j-o-lantern0422
Copy link
Author

なるほど!
Object#eql? が同一性を判定しているという記述は正しくて、例が同値性を判定するように再定義されたものになっているという理解をしました。編集してみます 🙏

@j-o-lantern0422 j-o-lantern0422 changed the title Object#eql? はオブジェクトの同一性ではなく同値性を判定する Object#eql?の実行例を追記し、既存の例を再定義の例として明示する Nov 29, 2024
@j-o-lantern0422
Copy link
Author

@znz ご指摘ありがとうございます、提示いただいた案を採用して Object#eql? の例を追記、既存の例は再定義の例と明記しました

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants