27 votes

Quelle est la différence entre newSlot et setSlot dans la langue Io?

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?

32voto

draegtun Points 17081

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/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X