ruby-trunk-changes 2020-07-25

今日は Enumerable#inject のブロック引数に Symbol から変換したものを渡した時のメソッド可視性を考慮するようにする修正がありました。

[3ead2770a1] Nobuyoshi Nakada 2020-07-24 12:08:50 UTC

Enumerable#inject で receiver が Array 以外だった時の実装で each メソッドから呼ばれるコールバックとして使われる inject_op_i() という関数で、渡されたブロックが Symbol から変換されたものだった時にメソッド呼び出しするのに rb_funcallv() ではなく rb_funcallv_public() を使うようにしています。private なメソッドのメソッド名を Symbol で渡した時には呼べないはず、というのを厳密にチェックさせるようにしているそうです。なるほどー。しかしそこまで気にしたことないな……。