在Java和C++等语言中,我们为构造函数提供参数.
你是如何在Pharo Smalltalk中做到这一点的?
我想要类似的东西
|aColor|
aColor = Color new 'red'.
Run Code Online (Sandbox Code Playgroud)
或者这是不好的做法,我应该一直这样做
|aColor|
aColor = Color new.
aColor name:= red.d
Run Code Online (Sandbox Code Playgroud)
And*_*ier 12
简短的回答是你可以在Smalltalk中做同样的事情.从调用代码看起来像:
aColor := Color named: 'Red'.
Run Code Online (Sandbox Code Playgroud)
答案很长,在Smalltalk中你没有构造函数,至少在你有一个以类命名的特殊消息的意义上.你在Smalltalk中所做的是定义类端消息(即类所理解的消息,而不是实例[*]),您可以在其中实例化和配置实例.假设您的Color
类有一个name
实例变量和一个setter,该#named:
方法将实现如下:
(class) Color>>named: aName
| color |
color := self new.
color name: aName.
^color.
Run Code Online (Sandbox Code Playgroud)
有些事情需要注意:
#new
发送给类的消息来创建新实例.您可以将#new
消息视为创建对象的基本方式(提示:您可以浏览#new
消息的实现者以查看其实现方式).Color fromHexa:
)或返回预先创建的实例(例如Color blue
).Color new
.如果您想禁止该行为,则必须覆盖#new
类消息.在Stef的免费在线Smalltalk书籍中,您可以阅读许多关于Smalltalk基础知识的好书
[*]由于Smalltalk的正交性,这是很自然的,因为所有(包括类)都是一个对象.如果您有兴趣,请查看Pharo by Example的第13章或Smalltalk中对类和元类的任何其他引用.
HTH
归档时间: |
|
查看次数: |
4579 次 |
最近记录: |