💭

[Bug #21661] ブロックのデフォルト引数で1行メソッド定義が定義できるバグ報告

に公開

[Bug #21661] Endless method definition as a default value of block parameter is wrongly accepted in Prism

  • 次のように Prism だとブロックのデフォルト引数で1行メソッド定義が定義できてしまうというバグ報告
proc do |a = def f = 1; b|
  p f # => 1
end.call

p f # => 1
  • parse.y だとエラーになるので意図しない挙動みたいですね
  • このバグは Ruby 4.0 ですでに修正済み
  • ちなみに通常のメソッド定義であれば Prism でも parse.y でも動作する
proc do |a = def f; 1 end; b|
  p f # => 1
end.call
# Prism   => OK
# parse.y => OK
GitHubで編集を提案

Discussion