doctree
doctree copied to clipboard
<=> の返り値を訂正
#2179 で各種クラスの <=>
のメソッドシグニチャーで返り値の表記がバラバラであることが指摘されました。
この問題を issue 化します。
わりと多くの <=>
メソッドが -1 | 0 | 1 | nil
を返り値としますが,nil
が抜けていたり(誤り;古い仕様のまま),Integer | nil
だったり(誤りではないが,具体的に書きたい)です。
メソッドシグニチャーだけでなく,説明文や「RETURN」を書き直す必要があるメソッドも少なくないようです。
以下のリストは #2179 の GREP 検索の結果を整理したものです。 ただし,以下のようなものは省いています。
- 現時点で既に修正プルリクエストができているもの
-
-1 | 0 | 1 | nil
ではないが,現状が正しいもの - nodoc でコメントアウトされているもの(Gem::Requirement が該当)
◎-1 | 0 | 1
になっているもの
(nil
を返す場合があるかどうか,個別に確認する必要があります)
- [ ] Array#<=>
- [x] Symbol#<=>
- [x] OpenSSL::BN#<=>
- [ ] OpenSSL::X509::Name#<=>
- [ ] RDoc::Context#<=>
- [ ] REXML::Comment#<=>
- [ ] REXML::Text#<=>
なお,X509__Name は other のスペルが間違っています。
◎Integer | nil
になっているもの
(Integer
が本当に -1
,0
,1
なのかは個別に確認する必要があります)
- [ ] File::Stat#<=>
- [ ] Module#<=>
- [ ] IPAddr#<=>
- [x] Gem::Version#<=>
◎Fixnum | nil
になっているもの(Ruby 2.3 なので対処しない)
(Ruby 2.3 系まで)
- [x] ~Bignum#<=>~
◎Integer
になっているもの
(返り値が本当に -1
,0
,1
,nil
なのかは個別に確認する必要があります)
なお,上記の Rake::EarlyTime#<=>
の返り値は ~-1 | nil
が正しい(0
や 1
を返すことはない)のだと思います。~ 常に -1
です。
◎Fixnum
になっているもの(Ruby 2.3 なので対処しない)
(Ruby 2.3 系まで)
- [x] ~Fixnum#<=>~
◎1 | 0 | -1 | nil
になっているもの
- [x] Float#<=>
これは正しいのですが,他に合わせて -1 | 0 | 1 | nil
の順序にしておくのがいいかと思います。
Issue立てていただいてありがとうございます🙏
Fixnum / Bignum に関しては、2.3以下のドキュメントはすでに生成しておらず、コードを直したところで生成されるドキュメントに変化があるわけではないので、特に手を付けずに良いと思います。
Ruby 2.3 以降だと思い込んでいました。今は Ruby 2.4 以降だけ考えればいいんですね。