1
我只是在扮演看到從子類的實例方法調用父類的實例方法調用和使用我的測試的代碼如下:混亂與子類
class Animal
def bark
p "hukkhh"
end
end
#=> nil
class Cow < Animal
end
#=> nil
Cow.public_instance_method(:bark)
#=> #<UnboundMethod: Cow(Animal)#bark>
class Cow
bark
end
#=> NameError: undefined local variable or method `bark' for Cow:Class
# from (irb):11:in `<class:Cow>'
# from (irb):10
# from C:/Ruby193/bin/irb:12:in `<main>'
從那個代碼,我證實了實例方法不能在沒有相應類的對象實例的情況下執行。
但後來我嘗試下面的代碼:
def talk
p "hi"
end
#=> nil
Object.public_instance_method(:talk)
#=> #<UnboundMethod: Object#talk>
class Foo
talk
end
# prints: hi
#=> "hi"
這裏輸出使我困惑我的第一個測試代碼輸出。
誰能幫我瞭解這些背後以上的事實呢? talk
你定義是
我希望你比我更好的解釋器:-) – mdesantis 2013-03-02 18:27:22
爲什麼沒有'Cow.respond_to? :talk#=> true'和'Cow.new.respond_to? :說話#=>真實'給予真實。我的意思是'talk'是一種類方法嗎?那麼爲什麼'Cow.new.respond_to? :talk#=> true'? – 2013-03-02 18:47:55
'talk'是Object'的'方法這是所有對象的根和'class'也是'Object'。你可以檢查這個:'class.is_a? Object'。它應該返回'true'。你可以閱讀更多關於'Object'這裏:http://ruby-doc.org/core-2.0/Object.html – codeit 2013-03-02 19:01:46