Keep your method to yourself with define_singleton_method
So define_singleton_method is quite cool.
Angel = Class.new do
def dreaming_of_an
whatever
end
end
This is going to fail, whatever is not defined.
Angel.new.dreaming_of_an
(irb):3:in `dreaming_of_an': undefined local variable or method `whatever' for #<Angel:0x0000000107045b98> (NameError)
I can define whatever outside of the object itself.
Angel.new.tap { def whatever; 'aaaaaangel--iiii'; end }.dreaming_of_an
=> "aaaaaangel--iiii"
But what if I define this method directly on the instance
Angel.new.tap { def _1.whatever; 'aaaaaangel'; end }.dreaming_of_an
=> "aaaaaangel"
This seems cleaner
Angel.new.tap { _1.define_singleton_method(:whatever) { 'aaaaaangel' } }.dreaming_of_an
=> "aaaaaangel"
For bonus points, the method lookup fails for _2 because the second argument is nil and it defaults to the global method
irb(main):012> Angel.new.tap { def _1.whatever; 'aaaaaangel'; end }.dreaming_of_an
=> "aaaaaangel"
irb(main):013> Angel.new.tap { def _2.whatever; 'aaaaaangel'; end }.dreaming_of_an
=> "aaaaaangel--iiii"
However, we did manage to assign a singleton method on nil…which is fun.
nil.whatever
=> "aaaaaangel"