Dans le langage Io, il existe 2 méthodes pour créer des emplacements: newSlot et setSlot. Les deux semblent avoir un comportement similaire, sauf que newSlot crée également un setter. Dans quels cas existe-t-il un besoin de créer un setter en même temps que la création d'un slot? Quel est exactement le but du setter de toute façon?
Réponse
Trop de publicités?Je crois que c'est une commodité qui permet de bonnes pratiques de codage. Ainsi, si vous souhaitez exposer des objets dans l'attribut, newSlot
ou son synonyme ::=
sont le moyen privilégié pour aller.
newSlot
peut rendre les choses plus agréables. Pour eg.
Animal := Object clone do (
legs ::= nil // creates leg slot & setLegs() setter
tail ::= nil // creates tail slot & setTail() setter
)
// I think below is more aesthetic
Cat := Animal clone setLegs(4) setTail(1)
// compared to this
Dog := Animal clone do (legs = 4; tail = 1)
Et il peut aussi contourner do()
contexte. Pour eg.
Pet := Animal clone do (
name ::= nil
)
myPetCats := list("Ambrose", "Fluffy", "Whiskers") map (petName,
Pet clone do (name = petName) // throws exception
)
L' Pet clone do (name = petName)
mourront jeter Exception: Pet does not respond to 'petName'
car do()
est interprétée dans le cloné Pet
contexte et ne peut donc voir petName
.
Ainsi, au lieu, vous devez utiliser le setter:
myPetCats := list("Ambrose", "Fluffy", "Whiskers") map (petName,
Pet clone setName(petName)
)
/I3az/