📑

[Bug #20948] module (expr)::Foo 経由で定数を参照すると誤った値を参照してしまうというバグ報告

2024/11/18に公開

[Bug #20948] Constant references incorrectly cached in module (expr)::Foo

  • 以下のように module (expr)::Foo 経由で定数を参照すると誤った値を参照してしまうというバグ報告
module M1
  module Foo
    X = 1
  end
end

module M2
  module Foo
    X = 2
  end
end


[M1, M2].each do
  module _1::Foo
    # 1, 2 が出力されてほしいが実際には 1, 1 と出力される
    p X
  end
end
  • 以下のように参照された場合は問題ないので上のコード特有なんですかね?
# 直接参照した場合
p M1::Foo::X # => 1
p M2::Foo::X # => 2


# module を経由しない場合
[M1, M2].each do
  p _1::Foo::X
end
  • かなりニッチなバグなんですがハマるときつそう
GitHubで編集を提案

Discussion