簡體   English   中英

我們如何從另一個類方法中調用一個類方法?

[英]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即類對象。

在繼承過程中保持一致性也是很好的。 想象一下,您擁有SuperClassSubClass 然后,如果您在SuperClass某處使用self methodName ,則在SubClass它將等同於SubClass methodName因為執行該方法的對象將是SubClass對象。 現在,如果您對SuperClass methodName進行硬編碼,那么子類中的名稱將是相同的,這可能不是您所期望的。

如果您要執行className class methodName ,則會向className class對象(它是Metaclass的實例)發送一條消息,這可能與您期望的完全不同。

這是顯示Smalltalk層次結構核心概念的圖片。 (空心箭頭是繼承)。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM