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 されています