解决方法
我们使用类方法/实例变量.一个类是一个对象,毕竟可以有方法.
例如,Rectangle类有一个方法#origin:corner:所以你可以写
Rectangle origin: 0@0 corner: 100@100
创建一个Rectangle.这只是消息#origin:corner:发送到称为Rectangle的对象(一个类是一个对象!),两个Points作为参数.
类侧实例变量的工作方式大致相同.作为对象的类可以具有实例变量.从SUnit库:
TestCase class instanceVariableNames: 'history'
然后TestCase类以通常的方式暴露了这个,使用getter / setter(#history和#history :).
编辑:我使用的@引起了很多讨论.这就是所谓的binary message,它允许一个人定义选择器,看起来只是其他语言将称为中缀运算符.例如,3 4,或0 @ 0.在@的情况下,Number类定义一个称为@的方法,取参数y,定义为^ Point x:self y:y – “返回其坐标为我自己的值,其y坐标是参数的Point”.
Point是一个有序对,但当然没有什么可以阻止一个定义更高维的版本. Point可以定义一个叫做@的方法,例如:^ Triple x:self xy:self yz:z – “返回一个R ^ 3中的一个点,其中x,y坐标是我自己的,z坐标是给定参数“.