在肯特贝克的书Smalltalk Best Practice Patterns中,双重大符号(>>
)用于定义这样的方法:
Point class>>x: xNumber y: yNumber
^self new
setX: xNumber
y: yNumber
Point>>setX: xNumber y: yNumber
x := xNumber.
y := yNumber.
^self
但是,我无法在GNU Smalltalk中运行它。
在Smalltalk的某些实现中,它是有效的语法吗?或者它只是一种伪代码?
答案 0 :(得分:5)
实际上这是伪代码。
在其他语言中,您可以使用.
告诉人们该方法在此课程中,但是在小写中您编写>>
Point class>>x: xNumber y: yNumber
^self new
setX: xNumber
y: yNumber
使用源代码粘贴文本区域中的方法:
x: xNumber y: yNumber
^self new
setX: xNumber
y: yNumber
Strg-s保存代码
对于
Point>>setX: xNumber y: yNumber
x := xNumber.
y := yNumber.
^self
你会做同样但不使用课程
答案 1 :(得分:4)
另外,请注意,确实,#>>是一个可以发送给类的消息,它基本上访问符号的方法字典(selector参数)。请参阅行为类,方法>>
>> selector
"Answer the compiled method associated with the argument, selector (a
Symbol), a message selector in the receiver's method dictionary. If the
selector is not in the dictionary, create an error notification."
^self compiledMethodAt: selector
所以你可以做,例如(检查)
Point class >> #x:y:
但请注意,这里我们发送#class,因为#x:y:是一个类侧方法。如果您想访问实例端方法,请说#normalized然后您可以执行:
Point >> #normalized
答案 2 :(得分:2)
GNU Smalltalk的正确语法如下所示:
Point class extend [
x: xNumber y: yNumber [
^self new
setX: xNumber
y: yNumber ]
]
Point extend [
setX: xNumber y: yNumber [
x := xNumber.
y := yNumber.
^self ]
]
有关GNU Smalltalk语法的更多信息,请参阅here。