2011-05-12 15 views
28

En el lenguaje Io, hay 2 métodos para crear slots: newSlot y setSlot. Ambos parecen tener un comportamiento similar, excepto que newSlot también crea un setter. ¿Qué casos hay para la necesidad de crear un setter al mismo tiempo que la creación de tragamonedas? ¿Cuál es exactamente el propósito del colocador de todos modos?¿Cuál es la diferencia entre newSlot y setSlot en el lenguaje Io?

+3

También me preguntaba lo que un colocador estaba al final del primer día de Io en 7 idiomas en 7 semanas. – Jedidja

Respuesta

34

Creo que es una conveniencia que proporciona buenas prácticas de codificación. Por lo tanto, si desea exponer un atributo de objetos, entonces newSlot o su sinónimo ::= es la forma preferida de proceder.

newSlot puede hacer que las cosas se vean mejor. Por ej.

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) 

Y también se puede obtener alrededor de do() contexto. Por ej.

Pet := Animal clone do (
    name ::= nil 
) 

myPetCats := list("Ambrose", "Fluffy", "Whiskers") map (petName, 
    Pet clone do (name = petName) // throws exception 
) 

El Pet clone do (name = petName) morirán tirar Exception: Pet does not respond to 'petName' porque do() se interpreta dentro del contexto Pet clonado y para que no pueda ver petName.

Así que en lugar es necesario utilizar la incubadora:

myPetCats := list("Ambrose", "Fluffy", "Whiskers") map (petName, 
    Pet clone setName(petName) 
) 
Cuestiones relacionadas