[英]How do we call a class method from another class method?
從另一個類方法調用一個類方法的正確方法是什么?
是嗎
className methodName
要么
self methodName
要么
className class methodName
不創建類的實例時可以使用self嗎?
如果要從同一類調用它, self methodName
使用self methodName
。 在Smalltalk中,類本身就是對象,因此,類方法中的self methodName
將消息發送給self即類對象。
在繼承過程中保持一致性也是很好的。 想象一下,您擁有SuperClass
和SubClass
。 然后,如果您在SuperClass
某處使用self methodName
,則在SubClass
它將等同於SubClass methodName
因為執行該方法的對象將是SubClass
對象。 現在,如果您對SuperClass methodName
進行硬編碼,那么子類中的名稱將是相同的,這可能不是您所期望的。
如果您要執行className class methodName
,則會向className class
對象(它是Metaclass
的實例)發送一條消息,這可能與您期望的完全不同。
這是顯示Smalltalk層次結構核心概念的圖片。 (空心箭頭是繼承)。
如果你有
SomeClass class >> #someMethod
"do something"
那你應該用
SomeClass class >> #otherMethod
self someMethod
要么
OtherClass class >> #otherMethod
SomeClass someMethod
第二種方法適用於第一種情況,但出於設計的考慮,通常優先考慮。
使用self
被認為更好,因為可以避免在各處重復類名。 至於其他方法是否起作用,請嘗試讓我們知道;)在您的映像中編譯並運行單行方法比在SO上詢問要更有效!! 探索和實驗是Smalltalk的全部內容-使用力量,盧克:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.