2014-12-08 65 views
2

我有一個可以製作汽車對象的類。它有兩個實例變量:Make和Color。我有調用工作空間內的本方法的一個問題(下面指出)在Smalltalk中調用構造函數方法

類方法-Constructor

make: aMake color: aColor 
    "Creates a new car object, sets its instance variables by the arguments" 
    |car| 
    car := self new. 
    car setMake: aMake setColor: aColor. "accessor method below" 
    ^car 

存取方法

setMake: make setColor: color 
    "sets the instance variables" 
    Make := make. 
    Color := color. 

工作區(呼叫碼)

|car| 
car := Car make: 'toyota' color: 'red' 

當我調用這一行時,我得到'消息未明白'。這裏有什麼問題?

回答

7

一切看起來都很好。可能的問題是你的「構造函數」(在Smalltalk中更可能被稱爲「實例創建消息」)需要在類的一端實現,並且你可能在實例端做了這樣的事情。相反,您的設置...必須位於實例一側。哪些消息不明白(錯誤細節總是有幫助)?它應該在調試器中說,這將有助於澄清。

+0

我的問題是與IDE – BDillan 2014-12-10 01:33:21

0

我注意到你的代碼另外兩個問題:

  • 在Smalltalk中,我們不使用二傳手設置「
  • 實例變量有一個小寫字母。

所以初始化會

make: aMake color: aColor 
    "sets the instance variables" 
    make := aMake. 
    color := aColor. 
+1

我不知道的'set'評論。確實,你沒有看到他們中的很多人。但他們確實存在。例如'setValue:'。我的股票Pharo圖像有1199個以'set'開頭的方法。 – 2014-12-08 23:07:45

+2

#setX:y :(通知集只在開頭)IIRC是最佳實踐模式之一。通常我太懶惰,只是使用訪問器 – 2014-12-09 03:50:10