在Smalltalk中调用构造方法

时间:2014-12-08 03:41:44

标签: smalltalk pharo

我有一个制作汽车对象的课程。它有两个实例变量:Make和Color。我在工作区内调用此方法时遇到问题(如下所述)

类方法-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'

我得到的消息未被理解'在调用此行时。这是什么问题?

3 个答案:

答案 0 :(得分:7)

一切都很好看。可能的问题是你的“构造函数”(更有可能在Smalltalk中称为“实例创建消息”)需要在类端实现,而你可能在实例端实现了。相反,你的集合......必须在实例端。哪个消息不被理解(错误详情总是有帮助)?它应该在调试器中说,这将有助于澄清。

答案 1 :(得分:0)

我发现您的代码还有两个问题:

  • 在smalltalk中我们不会使用' set' for setters
  • 实例变量的初始值为小写。

所以初始化程序将是

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

答案 2 :(得分:0)

正确完成所有这些事情的参考书是:

http://www.amazon.com/Smalltalk-Best-Practice-Patterns-Kent/dp/013476904X

单击“Look Inside”图片,您将能够访问目录和构造函数方法。

我显然无法复制这里的东西,所以这里有一个小的提取图片。

Constructor Method