💡

[Bug #21003] 意図せず『ブロック引数を参照していない』警告が出るバグ報告

2025/01/05に公開

[Bug #21003] unexpected warning about ignored block

  • 以下のようなコードで意図せず警告が出力されるというバグ報告
$VERBOSE = true

def foo(*, &block) = block.call
def bar(buz, ...) = foo(buz, ...)

# warning: the block passed to 'Object#bar' defined at test.rb:4 may be ignored
p bar(:test) { 1 + 2 } # => 3
  • これは Ruby 3.4 で追加された『ブロックを使用していないメソッドにブロック引数を渡した時の警告』になります
  • 例えば以下のような感じです
$VERBOSE = true

def hoge
end

# hoge メソッドではブロック引数を参照していないのでブロック引数を渡すと警告が出る
# warning: the block passed to 'Object#hoge' defined at test.rb:3 may be ignored
hoge {}
  • 最小のコードだと foo にブロック引数をフォワードしているので『ブロック引数を参照している』はずなのに意図せず警告が出ている感じですね
  • このバグは開発版の Ruby 3.5-dev で修正済みです
GitHubで編集を提案

Discussion