在smalltalk中,當我們通過調用new創建一個調用initialize的對象時。我想初始化,但用我自己的參數(在運行時傳遞)。我怎樣才能做到這一點。在smalltalk中新建並初始化 - 如何傳遞參數來初始化
例如Myobjcet new
但我如何將參數傳遞給它,以便它們傳遞給初始化。 我正在使用Pharo。
在smalltalk中,當我們通過調用new創建一個調用initialize的對象時。我想初始化,但用我自己的參數(在運行時傳遞)。我怎樣才能做到這一點。在smalltalk中新建並初始化 - 如何傳遞參數來初始化
例如Myobjcet new
但我如何將參數傳遞給它,以便它們傳遞給初始化。 我正在使用Pharo。
如果我記得,應該避免重新實現類方法new
和initialize
。相反,您可以創建自己的類方法(除了新的或初始化的),它需要參數,並在創建新實例時使用這些方法。例如在Squeak
中查看類別方法with:
的類別Collection
。它首先創建一個集合實例,然後將作爲參數傳遞的對象添加到實例中。
with: anObject
"Answer an instance of me containing anObject."
^self new
add: anObject;
yourself
你Pharo
也許基於佳樂,所以你應該找到相同的,或在您的圖像Collection
相似的類方法。
正確編寫複雜對象層次結構的實例化和初始化代碼在Smalltalk中很棘手。更重要的是,Object
中實現的默認初始化邏輯在不同的Smalltalk方言中是不同的(即Pharo決定引入默認初始化器,使事情變得更糟)。
爲了避免混亂,並有明確的,一致的規則海邊團隊決定採用以下規則對他們所有代碼:
http://code.google.com/p/seaside/wiki/ObjectInitialization
而且海邊代碼包含您在錯誤代碼評論家規則使用建議的初始化模式。
在閱讀完這些之後,我認爲這或多或少是我多年來爲自己提出的規則,主要是通過反覆試驗(也就是打我的腳)。我已預訂標記以供將來參考。 – 2013-04-23 18:01:48
所以這是通過調用類方法來實例化對象的一種很好的方法。我不知道。想知道它是否是一種好的做法。 – j10 2013-04-23 15:57:09
如果您需要在創建對象時初始化新創建的對象,那麼是的,創建您自己的類方法是(我相信)很好的做法。這裏有更多有經驗的Smalltalkers,所以他們最終會在這件事上發表意見。如果他們另有說法,那麼我會相信他們對我的看法。 :) – 2013-04-23 15:59:48
感謝您的建議。 – j10 2013-04-23 16:23:21