% ruby -v && echo -e "a\nb" | RUBY_BOX=1 ruby -e 'gets; $_; gets; p $_' ruby 4.0.0 (2025-12-25 revision 553f1675f3) +PRISM [arm64-darwin25] ruby: warning: Ruby::Box is experimental, and the behavior may change in the future! See https://docs.ruby-lang.org/en/4.0/Ruby/Box.html for known issues, etc. "a\n" ── 二度読んで、一度しか更新されなかった。 五 / 四十七
def foo(a, b) [1].each do |x| [2].each do |y| a + b + x + y end end end # method env: a, b # block env: x # block env: y block env y ← 実行中 ↓ 外側の env へ block env x ↓ method env a b a + b + x + y を評価するとき y → 自分の env ── ローカル変数はフレームごとの env に置かれる 二十 / 四十七 x → 1つ外 a b → 2つ外
foo(a, b) [1].each do |x| [2].each do |y| a + b + x + y end end end # ← ここの ep が lep block env # block ep ↓ 辿る # block ep block env y ← 実行中の ep x ↓ 辿る method env a b ← 定義元 = lep どのブロックの中にいても、定義元まで辿れば 同じ lep に着く 二十一 / 四十七
-e 'gets; $_; gets; p $_' ruby 4.0.6 (2026-07-14 revision 03b6d3f889) +PRISM [arm64-darwin25] ruby: warning: Ruby::Box is experimental, and the behavior may change in the future! See https://docs.ruby-lang.org/en/4.0/Ruby/Box.html for known issues, etc. "b\n" お後がよろしいようで https://github.com/ruby/ruby/pull/16303 四十七 / 四十七