From: ruby-core@... Date: 2015-07-02T13:49:00+00:00 Subject: [ruby-core:69844] [Ruby trunk - Feature #11325] [Rejected] Block is passed to initializer implicitly even when I asked not to. Issue #11325 has been updated by Marc-Andre Lafortune. Status changed from Open to Rejected It may be surprising to you, but this is by design. You have to explicitly pass an empty block when using `super`: super(&nil) There's also no way to change this even if we wanted to because of incompatibilities. ---------------------------------------- Feature #11325: Block is passed to initializer implicitly even when I asked not to. https://bugs.ruby-lang.org/issues/11325#change-53243 * Author: Andrew Kozin * Status: Rejected * Priority: Normal * Assignee: ---------------------------------------- This works as expected: ~~~ruby class Foo attr_reader :block def initialize(&block) @block = block end end foo = Foo.new { :foo } foo.block.nil? # => false ~~~ But then I'm trying to stop passing a block to the superclass' initializer and cannot do this: ~~~ruby class Bar < Foo def initialize(&block) block = nil # added it, however this shouldn't be necessary yield # nor this one super() # explicitly asked not to pass the block end end bar = Bar.new { :foo } bar.block.nil? # => false (expected true) ~~~ Adding an empty block is not the solution, because what is really needed is **stop passing a block**. -- https://bugs.ruby-lang.org/