如何解决为什么#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 举报,一经查实,本站将立刻删除。