2010-05-18 28 views
2

Une grande partie de squeak est implémentée en utilisant squeak lui-même. Je suis curieux de savoir si les pseudo variables telles que self ou true sont également implémentées en utilisant squeak. Si la réponse est oui, où se situe l'implémentation? Supposons que je souhaite ajouter une nouvelle sous-classe de "Boolean" appelée "Other" qui représentera une troisième option: ni vrai ni faux. Je veux que other, la seule instance de Other soit similaire aux singletons globaux vrai/faux.Créer de nouvelles variables pseudo dans Squeak

Des idées? Merci.

Répondre

4

Faire un mondial:

Smalltalk at: #other put: Other new 
1

La réponse précédente ne fonctionnera pas sans autre modification à votre image Smalltalk car Boolean Bloque nouveau pour générer une erreur

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

Si vous essayez la sous-classe booléenne : #Other, puis essayez d'ajouter l'autre mot clé aux globales Smalltalk comme ci-dessus, vous allez déclencher une erreur.

Vous pouvez supprimer Boolean >> new, implémenter votre classe Other, l'ajouter à vos globals Smalltalk, puis remplacer Boolean >> new.

Ensuite, vous pouvez envisager de mettre à jour ClassBuilder> reservedNames pour protéger votre nouvelle booléenne

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