Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么#at:put:在SmallInteger的GNU Smalltalk消息中?_Smalltalk_Gnu Smalltalk - Fatal编程技术网

为什么#at:put:在SmallInteger的GNU Smalltalk消息中?

为什么#at:put:在SmallInteger的GNU Smalltalk消息中?,smalltalk,gnu-smalltalk,Smalltalk,Gnu Smalltalk,在GNU Smalltalk中玩数组类时,我惊讶地发现at:put:消息属于类SmallInteger,而不是类数组(或数组的任何其他超类)。为什么?#at:put:是在对象上定义的SmallInteger重新定义它以引发异常,因为它不可索引,任何子类也不可索引 这也有点棘手 详细解释: 1) SmallInteger只是在VM中转换成整数。 事实上,SmallIntegera在VM中被翻译成(位移位:1)位或:1 2) #at:put:是一个检查类是否可索引的原语。可索引对象是可以发送到以下位

在GNU Smalltalk中玩
数组
类时,我惊讶地发现
at:put:
消息属于类
SmallInteger
,而不是类
数组
(或
数组
的任何其他超类)。为什么?

#at:put:
是在
对象上定义的
SmallInteger
重新定义它以引发异常,因为它不可索引,任何子类也不可索引

这也有点棘手

详细解释:

1)
SmallInteger
只是在VM中转换成整数。 事实上,
SmallInteger
a
在VM中被翻译成
(位移位:1)位或:1

2)
#at:put:
是一个检查类是否可索引的原语。可索引对象是可以发送到以下位置的对象:put:
#at:
,并且必须通过
#new:
实例化。这是获得变量实例的方法,也是唯一的方法。(Tangent:
OrderedCollection
在other中实例化了几个可索引对象,让您多次调用
#add:
并感觉长度是无限的)

3) 知道如果
#at:put:
未在
SmallIntager
类中重新定义,则原语必须首先检查对象是否为
SmallInteger
,然后检查其是否可索引。这将给您带来一些性能损失。在
SmallInteger
上重新定义
#at:put:
只需删除
SmallInteger
复选框。

#at:put:
是在
对象上定义的
SmallInteger
重新定义它以引发异常,因为它不可索引,任何子类也不可索引

这也有点棘手

详细解释:

1)
SmallInteger
只是在VM中转换成整数。 事实上,
SmallInteger
a
在VM中被翻译成
(位移位:1)位或:1

2)
#at:put:
是一个检查类是否可索引的原语。可索引对象是可以发送到以下位置的对象:put:
#at:
,并且必须通过
#new:
实例化。这是获得变量实例的方法,也是唯一的方法。(Tangent:
OrderedCollection
在other中实例化了几个可索引对象,让您多次调用
#add:
并感觉长度是无限的)


3) 知道如果
#at:put:
未在
SmallIntager
类中重新定义,则原语必须首先检查对象是否为
SmallInteger
,然后检查其是否可索引。这将给您带来一些性能损失。在
SmallInteger
上重新定义
#at:put:
只需删除
SmallInteger
复选框。

谢谢你的启示:-)但是,当在类对象中定义了#at:put:时,这意味着我必须在每个不可索引的类中重新定义此消息?不,仅用于VM以不同方式处理的消息。这只有在你决定入侵VM时才会发生。Thany you for the启示:-)但当类对象中定义了#at:put:时,这意味着我必须在每个不可索引的类中重新定义此消息?不,仅用于VM以不同的方式处理此消息。只有当你决定入侵虚拟机时才会发生这种情况。