From: ruby-core@... Date: 2019-02-04T18:25:05+00:00 Subject: [ruby-core:91394] [Ruby trunk Feature#15574] Prohibit to pass a block on super() implicitly Issue #15574 has been updated by marcandre (Marc-Andre Lafortune). I agree with Eregon that it would be a compatibility nightmare. Moreover I rather like this quirk. Is there an actual use case for thinking about removing it (besides it being quirky)? I would bet that there are way more methods calling super with the block intact than the reverse. I will frequently prepend a method that intercepts a parameter, for example, deals with it and call `super` with the rest: ``` ruby def foo(*args, **options, extra_opt: nil) puts "extra!" if extra_opt super(*args, **options) end ``` I don't recall passing a different (or no) block to `super`, but my memory isn't very good ;-) In short, I'm against this proposal. ---------------------------------------- Feature #15574: Prohibit to pass a block on super() implicitly https://bugs.ruby-lang.org/issues/15574#change-76651 * Author: ko1 (Koichi Sasada) * Status: Open * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: ---------------------------------------- As described in [Feature #15554], `super()` (not `super`) pass the given block. ``` class C def foo p block_given? end end class C1 < C def foo super #=> true super() #=> true end end C1.new.foo{} ``` `super` (without parameters) passes all passed parameters so it is no surprise to pass given block. However, `super()` (with parameters. In this case, it passes 0 parameters) also pass given block implicitly. I'm not sure who use this behavior, but I think it is simple to prohibit such implicit block passing. -- https://bugs.ruby-lang.org/ Unsubscribe: