大廈define_method()不是由主要的單類繼承:
class <<self
p private_instance_methods(false)
end
--output:--
[:public, :private, :include, :using, :define_method]
...而據我判斷,如果是不能繼承的方法,它必須被定義在課堂裏。需要注意的是,當你有一個模塊,紅寶石創建一個匿名類,並插入模塊的DEFS在匿名類,然後直接插入匿名類的方法查找鏈中包括類以上,例如:
module A
def greet
puts 'hi'
end
end
class Dog
include A
end
p Dog.instance_methods(false)
p Dog.instance_methods.grep(/^g/)
--output:--
[]
[:greet]
的輸出顯示,greet()是一種繼承的方法。但是因爲define_method()沒有被main的singleton類繼承,所以define_method()不能通過包含模塊來獲得。相反,似乎define_method()必須在main的singleton類中定義。所以實現的一種方法是讓Ruby解釋器在解析代碼之前執行以下代碼:
class <<self
def define_method(x, *y)
#same code as in Module's define method
end
end
我應該使用更好的示例。其實我只是想問一下'define_method'。 – txworking
你爲什麼要在'main'上下文中定義一些東西? – tadman
@txworking你只是好奇,還是有你想解決的實際問題? – Stefan