2022/01/14 今回の気になった bugs.ruby のチケット

今週はレシーバに定義されている定数名とその値の Hash を返すメソッドの提案がありました。

[Bug #18475] Yielding an element for Enumerator in another thread dumps core

  • 以下のコードを実行すると segv するというバグ報告
def run
  Thread.new do
    1.times do |value|
      yield "some-value"
    end
  end.join
end

to_enum(:run).first
  • #18474 を調べている時に見つけたバグらしい

[Feature #18478] Module#constant_pairs

  • 定数名と定数の値の両方を返す Module#constant_pairs メソッドを追加する提案
module A
  B = 1

  class C
  end
end

A.constant_pairs # => { B: 1, C: A::C }
  • 現状だと以下のようなコードを書く必要がある
module A
  B = 1

  class C
  end
end

p A.constants.to_h { |c| [ c, A.const_get(c)] }
# => {:C=>A::C, :B=>1}

[Feature #10829] Add to_proc method to the Array class

  • 以下のような Array#to_proc を追加する提案
    • 7年前のチケット
class Array
  def to_proc
    proc { |receiver| receiver.send *self }
  end
end

# 1.send(:+, 3) のような呼び出しを行う
p [1, 2, 3, 4, 5].map(&[:+, 3])
# => [4, 5, 6, 7, 8]
  • 最近チケットが更新されていたんですがどこかで話題になってたんですかね?