2021/02/11 今週の気になった bugs.ruby のチケット

内容は適当です。
今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。
あくまでも『わたしが気になったチケット』で全ての bugs.ruby のチケットを載せているわけではありません。

[Bug #17424] Interactive Ruby で Object#method を再定義して任意の文字を入力するとエラーが発生する

  • 表題の通りでなんですが irb 上で #method を再定義するとクラッシュするというバグ報告です
  • これは irb 上で #method を定義すると Kernel#method よりも優先順位が高い Object#method が定義されてしまい、Reline でその Object#method を使用しているためです
  • これは仕様でチケットは閉じられています
  • まあしょうがなさそう

[Feature #7394] Enumerable#find ifnone parameter could be non-callable

  • Enumerable#find は要素が見つからなかった場合の処理をフォールバックすることができる
# 見つからなかった場合に第一引数の proc を呼び出す
p [1, 3, 5].find(-> { "none" }, &:even?)
# => "noge"
  • 現状は Proc オブジェクトを渡すがこれをそれ以外のオブジェクトを渡せるようにする提案
# 第一引数の値がそのまま返ってくる
p [1, 3, 5].find("none", &:even?)
# => "noge"
p [1, 3, 5].find(&:even?) || "none"

[Feature #17608] Compact and sum in one step

  • 次のように Array#sum を行う場合に #compact を介して行うことがある
a = [1, nil, 2, 3]

a.sum # !> TypeError

a.compact.sum # => 6

a.sum{_1 || 0} # => 6
  • これをワンステップで行うために #sum では nil の要素をスキップする、または Array#filter_sum のようなメソッドを追加する提案です
  • 最終的には a.sum{_1 || 0} で問題ないということで Reject されています