2012-08-31 38 views
1

希望在此調查集體意識,因爲我無法通過搜索找到答案。在Ruby 1.9+中,調用實例上的.methods將產生與該實例的類不同的結果。例如,「foo」.methods將包含'length'和'size',而String.methods則不會。這是什麼原因?我是一位資深的程序員,但是Ruby是新手。根據我的理解,方法應該包括所有的祖先方法,所以它是通過混合或其他模式將長度和大小添加到實例列表中而不是類的?在Ruby中的類和實例上調用.methods

+0

將一個類想象爲一個類的常量類(不知道這在Ruby中是否真的如此,但是這個想法仍然有效)。那麼它應該是有道理的。 – Cubic

回答

2

你很困惑.methods().instance_methods()

第一個會給你可以在String對象上調用的方法 - 也就是String類作爲對象本身。第二個會給你使用String類或String實例創建的對象的方法。

2

長度和大小是字符串實例方法,爲什麼它們會被包含在String的(類)方法列表中?類是對象,並有它們自己的方法。

換句話說,你會得到你所調用的對象支持的方法列表。字符串是一個類,所以你得到它的特定類方法,以及它繼承的類方法。

字符串實例是一個實例,因此您可以獲取字符串的實例方法以及它繼承的實例方法。