Pharo自定义类不可索引(smalltalk)



我有以下代码作为类的成员创建集合:

 CustomClass new members:Set new; yourself.

接下来我要的尺寸

custom members size.

这显然会导致0,但当我在集合中插入自定义元素并询问大小时,会导致一个错误,告诉我我的自定义元素不可索引。

custom members add: MyCustomElement new.
custom members size.  -> error

为什么会这样?如何在Smalltalk中解决这个问题?提前感谢

您展示的代码不应该触发错误
但你可能被#add:消息咬了一口。

#add:消息返回添加的元素,这样你就可以链接添加,比如:

collection2 add: (collection1 add: element).

这也适用于#at:put:

collection2 at: j put: (collection1 at: i put: k).

很像

c2[ j ] = c1[ i ] = k;

不过,如果你写这样的东西:

| s e |
e := MyCustomElement new.
s := (Set new) add: e.
^s size

则变量s将指向与e(MyCustomElement的实例)相同的对象,而不是新创建的Set。

因此,上面的示例将消息#size发送到MyCustomElement的实例,这听起来很像您描述的错误:这可能会触发错误,因为此类的实例不可索引。

你也可以写:

(s := Set new) add: e.

或者使用级联,通过将#自己发送到集合结束,有效地返回集合本身:

s := (Set new) add: e; yourself.

相关内容

  • 没有找到相关文章

最新更新