开发者

Create New Pseudo Variables in Squeak

Large part of squeak is implemented using squeak itself. I am curious to know if pseudo variables such as self or true are also implemented using squeak. If the answer is yes, whe开发者_如何学Cre the implementation located?

Specifically, assume that I want to add new subclass of "Boolean" called "Other" which will represent a third option: neither true nor false. I want that other, the only instance of Other to be similar to the true/false global singletons.

Any ideas? Thank you.


Make it a global:

Smalltalk at: #other put: Other new


The previous answer won't work without further modification to your Smalltalk image because Boolean overrides new to raise an error

new
    self error: 'You may not create any more Booleans - this is two-valued logic'

If you try Boolean subclass: #Other and then try to add the other keyword to the Smalltalk globals as above, you will raise an error.

You could remove Boolean>>new, implement your Other class, add it to your Smalltalk globals, then replace Boolean>>new.

Next, you might consider updating ClassBuilder>reservedNames to protect your new Boolean

reservedNames
"Return a list of names that must not be used for variables"
    ^#('self' 'super' 'thisContext' 'true' 'false' 'nil' 
     self super thisContext #true #false #nil).
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜