Project

General

Profile

Bug #17571

prependしたArray#[] が反映されない

Added by freedom (free dom) about 1 month ago. Updated 15 days ago.

Status:
Open
Priority:
Normal
Target version:
-
ruby -v:
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
[ruby-dev:50993]

Description

Arrayクラスにprependを使い[]メソッドを差し込んでもprependした[]を呼び出しません

また、Hashを継承したクラス(以下HashB)のインスタンスでHash#[]を既に呼び出している場合
prependして差し込んだ[]を通らずにHash#[]が呼び出されているようです

HashBのインスタンス呼び出しがprependより後の場合は期待通り動きました

再現コード(Array)

module TestMod
  def [](*)
    p :called
    super
  end
end
Array.prepend TestMod

[][1] # => 何も出力されない

再現コード(Hash)

module TestMod
  def [](*)
    p :called
    super
  end
end
class HashB < Hash;end
HashB.new[1]

Hash.prepend TestMod
{}[1] # => 何も出力されない

よろしくおねがいします

#1

Updated by jeremyevans0 (Jeremy Evans) 15 days ago

  • Assignee set to ko1 (Koichi Sasada)

I bisected this issue to b9007b6c548f91e88fd3f2ffa23de740431fa969 ("Introduce disposable call-cache"). The issue is still present in the master branch. Assigning to ko1 (Koichi Sasada) .

Also available in: Atom PDF