Ruby: Understanding _why's cloaker method -
i'm trying understand _why's cloaker method wrote in "a block costume":
class html def cloaker &blk (class << self; self; end).class_eval # ... rest of method end end end i realise class << self; self; end opens eigenclass of self, i've never seen inside instance method before. self @ point this? under impression self should receiver method called on, cloaker called inside method_missing:
def method_missing tag, text = nil, &blk # ... if blk cloaker(&blk).bind(self).call end # ... end so self inside method_missing call? , self when call:
((class << self; self; end).class_eval) inside cloaker method?
basically, want know whether we opening eignenclass of html class, or if doing specific instance of html class?
inside cloaker method, self instance of html since you'll call on object, you're creating singleton method on html class instances. instance:
class html def cloaker &blk (class << self; self; end).class_eval def new_method end end end end obj = html.new obj.cloaker p html.methods.grep /new_method/ # [] p obj.singleton_methods # [:new_method] edit
or jörg w mittag commented , pre-1.9 way of calling "object#define_singleton_method"
Comments
Post a Comment