2011-06-15 24 views

回答

4

#at:put:定義於ObjectSmallInteger確實將它重新定義爲拋出一個異常,因爲它不是可編入索引的,並且任何子類也是不可索引的。

這也有點棘手。

朗解釋:

1)SmallInteger只是翻譯成VM整數。 事實上,在VM中SmallIntegera被翻譯成(a bitShift: 1) bitOr: 1

2)#at:put:是檢查類是否可索引的原語。可轉位對象是可以發送的對象#at:put:,#at:並且必須通過#new:實例化。這是實現變量的唯一方法。 (切線:OrderedCollection正在實例化其他可索引對象,讓您多次呼叫#add:,感覺長度無限)。

3)知道如果#at:put:未在SmallIntager類中重新定義,該原語將不得不首先檢查對象是否爲SmallInteger,然後檢查它是否可索引。這會造成你一些性能損失。並重新定義#at:put:SmallInteger只需刪除SmallInteger檢查。

+0

感謝您的啓示:-)但是當#at:put:在類Object中定義時,意味着我必須在每個不可索引類中重新定義此消息? – Marc 2011-06-16 13:04:14

+0

Nop僅適用於由VM以不同方式處理的問題。只有當你決定攻擊虛擬機時纔會發生這種情況。 – mathk 2011-06-17 07:59:50