Создать новые псевдо-переменные в Squeak - PullRequest
2 голосов
/ 19 мая 2010

Большая часть скрипов реализована с использованием самого скрипов. Мне любопытно узнать, реализованы ли псевдопеременные, такие как self или true, с помощью squeak. Если ответ «да», где находится реализация?

В частности, предположим, что я хочу добавить новый подкласс «Boolean» с именем «Other», который будет представлять третий вариант: ни true, ни false. Я хочу, чтобы other, единственный экземпляр Other, был похож на истинные / ложные глобальные синглтоны.

Есть идеи? Спасибо.

Ответы [ 2 ]

4 голосов
/ 19 мая 2010

Сделать глобальным:

Smalltalk at: #other put: Other new
1 голос
/ 15 июля 2013

Предыдущий ответ не будет работать без дальнейшей модификации вашего образа Smalltalk, потому что Boolean переопределяет новый, чтобы вызвать ошибку

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

Если вы попытаетесь использовать логический подкласс: #Other, а затем попытаетесь добавить другое ключевое словодля глобалов Smalltalk, как указано выше, вы получите ошибку.

Вы можете удалить Boolean >> new, реализовать свой класс Other, добавить его в глобальные переменные Smalltalk, а затем заменить Boolean >> new.

Далее, вы можете подумать об обновлении ClassBuilder> reservedNames для защиты вашего нового логического значения

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).
...