[ruby-dev:51036] [Ruby master Bug#17764] ブロック付きメソッドにおけるproc(または Proc.new)の参照がArgumentErrorを吐く問題
From:
firelzrd@...
Date:
2021-03-31 02:30:58 UTC
List:
ruby-dev #51036
Issue #17764 has been updated by firelzrd (Masahito Suzuki).
ご返答ありがとうございます。
本件は「ブロックを指定しない proc」についてではなく「ブロックを指定した proc」がどうもバグっているのではないかと思い報告させていただきました。
ブロック付きでメソッドをコールしたとき、メソッド内ではblock_given?の値がtrueとなり、proc (またはProc.new)で渡されたブロックを参照可能なはずですが、
サンプルプログラムの挙動でもお分かりいただけるように、block_given?==trueの時のprocの参照がArgumentErrorを吐いているというものです。
以上、お力添えをいただければ幸いです。
osyo (manga osyo) wrote in #note-1:
> Ruby 3.0 からはブロック引数がない `Proc.new` / `proc` は `ArgumentError` になるようになりました。
>
> > ブロックを指定しない lambda は Ruby 2.6 までは警告メッセージ「warning: tried to create Proc object without a block」が出力され、Ruby 2.7 では ArgumentError (tried to create Proc object without a block) が発生します。
> > ブロックを指定しない proc は、Ruby 2.7 では $VERBOSE = true のときには警告メッセージ「warning: Capturing the given block using Proc.new is deprecated; use `&block` instead」が出力され、Ruby 3.0 では ArgumentError (tried to create Proc object without a block) が発生します。
> https://docs.ruby-lang.org/ja/2.7.0/method/Kernel/m/lambda.html
>
> - 関連PR:https://github.com/ruby/ruby/pull/3208
----------------------------------------
Bug #17764: ブロック付きメソッドにおけるproc(または Proc.new)の参照がArgumentErrorを吐く問題
https://bugs.ruby-lang.org/issues/17764#change-91193
* Author: firelzrd (Masahito Suzuki)
* Status: Open
* Priority: Normal
* ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN
----------------------------------------
# ブロック付きメソッドにおけるproc(または Proc.new)の参照がArgumentErrorを吐く問題
# Ruby 3.0.0 linux x86-64およびWindows上のmingw-x86-64バイナリにて発生し、2.7.2-1ではいずれも発生しないことを確認済み。
# また、2021/3/31現在、TryRubyサイト( https://try.ruby-lang.org/ ) の上でも発生することを確認済み。
def foo
puts (block_given? ? proc : proc{"ブロックなし"}).call
end
# @ruby 3.0.0
foo #ブロックなし => "ブロックなし"
foo{"ブロックあり"} #ブロックあり => ArgumentError: tried to create Proc object without a block
# @ruby 2.7.2
foo #ブロックなし => "ブロックなし"
foo{"ブロックあり"} #ブロックあり => "ブロックあり"
---Files--------------------------------
argumenterror.png (125 KB)
--
https://bugs.ruby-lang.org/