在Smalltalk中调用构造函数方法

在Smalltalk中调用构造函数方法,smalltalk,pharo,Smalltalk,Pharo,我有一个制作汽车物体的课程。它有两个实例变量:Make和Color。我在工作区内调用此方法时遇到问题(如下所述) 类方法-构造函数 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

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

类方法-构造函数

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.
工作区(调用代码)


打这条电话时,我听到“信息不清楚”。这里有什么问题?

一切看起来都很好。可能的问题是,您的“构造函数”(在Smalltalk中更可能被称为“实例创建消息”)需要在类端实现,而您可能已经在实例端实现了。相反,你的设置。。。必须在实例端。哪条消息不被理解(错误详细信息总是有帮助的)?它应该在调试器中显示,这将有助于澄清。

我注意到您的代码还有两个问题:

  • 在smalltalk中,setter不使用“set”
  • 实例变量的首字母为小写
所以初始值设定项是

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

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

单击“查看内部”图片,您将能够访问目录和构造函数方法receipe

我显然不能复制这里的东西,所以这里有一个小的摘录图片


我不确定
集的注释。你确实没有看到那么多。但它们确实存在<代码>设置值:
例如。我的stock Pharo图像中有1199个以“set”开头的方法。#setX:y:(注意set仅在开头)IIRC是最佳实践中的模式之一。通常我太懒了,只使用访问器。我的问题是IDE
make: aMake color: aColor
   "sets the instance variables"
    make := aMake.
    color := aColor.