camp.rb の最初の行の 1 つ: https://github.com/camping/camping/blob/ae5a9fabfbd02ba2361ad8831c15d723d3740b7e/lib/camping-unabridged.rb#L17、
meta_def
フレームワークはメソッドをObject
クラスに追加します。私はこのコードをいじっていますが、それが何をしているのかまだ理解できません。
class Object #:nodoc:
def meta_def(m,&b) #:nodoc:
(class<<self;self end).send(:define_method,m,&b)
end
end
このように印刷しようとすると(class<<self;self end)
:
class Object #:nodoc:
def meta_def(m,&b) #:nodoc:
puts (class<<self;self end)
end
end
puts 'a'.meta_def 'boo'
を出力します。#<Class:#<String:0x146810>>
これは、 のインスタンスを作成していることを意味しますClass
。しかし、それが何であり、何をしたのかはまだわかりません(class<<self;self end)
。誰かがこれがどのように機能するか説明できますか?