微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

| 在GNU Smalltalk中使用
Array
类时,我感到that 1消息属于
SmallInteger
类而不是
Array
(或any0ѭ的任何其他超类)。为什么?     

解决方法

        
#at:put:
Object
上定义。
SmallInteger
确实重新定义了它以引发异常,因为它不可索引,并且任何子类也无法索引。 而且这有点棘手。 详细说明: 1)在VM中,just2ѭ只是转换为整数。 实际上,
SmallInteger
10在虚拟机中转换为
(a bitShift: 1) bitOr: 1
。 2)
#at:put:
是检查该类是否可索引的原语。可索引对象是可以发送
#at:put:
#at:
且必须通过
#new:
实例化的对象。这是拥有变量实例的方法,并且是唯一的方法。 (切线:
OrderedCollection
正在实例化其他可索引对象,让您多次调用
#add:
,并且感觉长度是无限的)。 3)知道如果未在
SmallIntager
类中重新定义
#at:put:
,则原语必须首先检查对象是否为
SmallInteger
,然后检查其是否可索引。这会导致您的性能下降。并在ѭ2red上重新定义
#at:put:
,只需删除
SmallInteger
支票即可。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。