読んでる。昔に買ったのだけど、多分1章の途中までしか読んでいなかった(そのへんまではかすかな記憶があった)
不要になったsubscriptionを解約したり、monthlyで買ってたやつをannualにしたりと整理していた。
GitHubも年次で払おうかなと見に行ったけど、どうやら月次と価格が変わらないみたいだったのでやめた。
るりまのドキュメントを読んでいて気になった点があったのでruby-jpで質問した。
Range#cover?
のドキュメントについて質問させてください。 RDocの次の分の意味がちゃんと理解できずにいます。In the specific case of
(a..b).cover?(c...d)
witha <= c && b < d
, the end of the sequence must be calculated, which may exhibit poor performance if c is non-numeric. https://docs.ruby-lang.org/en/2.7.0/Range.html#method-i-cover-3F「
(a..b).cover?(c...d)
かつa <= c && b < d
の時、c
がnumericでないならば終端が計算されていないといけない。じゃないとパフォーマンスが悪くなる」と言う意味だと推測しているんですが、この「終端が計算されていないといけない(the end of the sequence must be calculated)」の意味をはかりかねています。 「be calculated」の意味がよく分かっていません。なんとなくsucc
で要素を列挙していくようなケースでパフォーマンスが悪化するのだろうなと予測していますが、それを表しているんでしょうか?
この機能自体は https://bugs.ruby-lang.org/issues/14473 で入ったみたい。
気になったきっかけ
「(a..b).cover?(c...d)」は「a <= c && b < d」を意味します。 cが数値ではなく終端が計算でもとまらない時、パフォーマンスの問題が起きる可能性があります。 https://docs.ruby-lang.org/ja/latest/method/Range/i/=3d=3d=3d.html るりまのドキュメントが誤訳っぽいので気になったのでした。
ところで最初は「終端が計算でもとまらない時」というのを見て「求まらない」か「止まらない」かパット見紛らわしいなと思って漢字にするだけのPRを作っていた。
しかし漢字にしたところでよくわからない文だし、(a..b).cover?(c...d)
はどう考えてもa <= c && b < d
を意味しないので不思議だなと原文を当たったところで、原文もよくわからないということが分かった。
この紛らわしいのを直すパッチには「漢字」というブランチ名をつけていてこのブランチ名が気に入っていたので、PRにできなくて残念。