irb(main):001:0>classAirb(main):002:1>definitializeirb(main):003:2>endirb(main):004:1>end=>:initializeirb(main):005:0>A.new.initializeTraceback(mostrecentcalllast):4:from/opt/rubies/2.6.1/bin/irb:23:in`<main>'
3: from /opt/rubies/2.6.1/bin/irb:23:in `load'
2: from /opt/rubies/2.6.1/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'1:from(irb):5NoMethodError(privatemethod`initialize' called for #<A:0x00007faedb0bf428>)
I think it is documented somewhere, but can't remember where it is now.
Anyway, these methods are always defined as private, unless singleton methods. initialize, initialize_copy, initialize_clone, initialize_dup, respond_to_missing?
This behavior is from [Feature #6539]. Do you remember why these methods are made to be always private, instead of setting them to be private in Kernel only?
I don't think this rule make sense for BasicObject classes since they don't have #dup and #clone and #respond_to?:
classA<BasicObjectpublicdefinitialize_dupendendA.new.initialize_dup# private method `initialize_dup' called