-1
class C
def aaa
print "aaa"
end
end
C.new.aaa
# => "aaa"
現在工作方法打印從模塊內核紅寶石內核:方法的行爲實例方法
Kernel.methods.grep /^print/
# => [:printf, :print]
這意味着,該方法定義爲類方法。
內核沒有實例方法打印
Kernel.instance_methods.grep /^print/
# => []
所以,第一個問題是:這怎麼可能,該類方法從對象接收電話? (C.new)
我也試着做同樣的伎倆,用自己的模塊:
module M
def self.print
"111"
end
end
class C
include M
def aaa
print
end
end
C.new.aaa
# => nil
你看,這又是內核模塊
但層次樹是:
C.ancestors
# => [C, M, Object, Kernel, BasicObject]
M.methods.grep /^print/
# => [:print]
在內核中定義的方法。我可以只作爲實例方法覆蓋
module M
def print
"111"
end
end
M.instance_methods.grep /^print/
# => [:print]
那麼kernel如何做到這一點?內核如何將類方法作爲實例方法?
哦,大謝謝!我不知道,私有方法不會顯示instance_methods。 – beornborn
:)很高興幫助! –