From: ko1@... Date: 2019-01-16T00:25:25+00:00 Subject: [ruby-core:91112] [Ruby trunk Bug#15539] Proc.new with no block shouldn't always warn Issue #15539 has been updated by ko1 (Koichi Sasada). I'll file the reason soon. Anyway, I recommend you to rewrite it with a block parameter: ``` def foo bar = nil, &b (b || bar).call end # or def foo bar = nil, &b bar ||= b bar.call end ``` ---------------------------------------- Bug #15539: Proc.new with no block shouldn't always warn https://bugs.ruby-lang.org/issues/15539#change-76346 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN ---------------------------------------- Hi, r66772 introduced a warning for the following code: ``` ruby def foo bar = Proc.new bar.call end foo { p "block" } # warn foo ->() { p "block" } # no warn ``` I don't think this case of `Proc.new` should warn. To eliminate warnings, I have to rewrite as: ``` ruby def foo bar = nil if bar bar.call else yield end end ``` Rails uses this "Proc.new" trick here: * https://github.com/rails/rails/blob/a08827a90b5a9be79379019cf5b242bd7236d2e3/actionpack/lib/action_controller/metal.rb#L29 * https://github.com/rails/rails/blob/a08827a90b5a9be79379019cf5b242bd7236d2e3/actionpack/lib/action_dispatch/middleware/stack.rb#L100 * https://github.com/rails/rails/blob/a08827a90b5a9be79379019cf5b242bd7236d2e3/activerecord/lib/active_record/statement_cache.rb#L116 * https://github.com/rails/rails/blob/a08827a90b5a9be79379019cf5b242bd7236d2e3/activesupport/lib/active_support/notifications/fanout.rb#L21 I can change Rails, but I want to know why and I don't see any discussion of r66772 (the commit doesn't have a feature number). Thanks! -- https://bugs.ruby-lang.org/ Unsubscribe: