Saltar al contenido

¿Diferencia entre nuevo e inicializar en Smalltalk?

Recabamos en todo el mundo online para traerte la solución para tu dilema, en caso de dificultades deja tu pregunta y contestamos porque estamos para ayudarte.

Solución:

Exactamente. Cuando envía el mensaje #nuevo, no solo crea el objeto, sino que también envía el mensaje #inicializar. Esto le permite personalizar la inicialización de los objetos. Mirar:

Behavior >> new
"Answer a new initialized instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable."

^ self basicNew initialize

Y entonces:

 ProtoObject >> initialize
"Subclasses should redefine this method to perform initializations on instance creation" 

Y:

   Behaviour >> basicNew
"Primitive. Answer an instance of the receiver (which is a class) with no 
indexable variables. Fail if the class is indexable. Essential. See Object 
documentation whatIsAPrimitive."


self isVariable ifTrue: [ ^ self basicNew: 0 ].
"space must be low"
OutOfMemory signal.
^ self basicNew  "retry if user proceeds"

Entonces… #basicNew es la primitiva que crea el objeto. Normalmente, usa #new y si no quiere nada en especial, no implementa #initialize y, por lo tanto, se ejecutará la implementación vacía de #ProtoObject. De lo contrario, puede enviar directamente #basicNew pero probablemente no debería hacerlo.

Salud

Con new, crea un nuevo objeto, mientras que el método de inicialización se ejecuta cuando se crea el nuevo objeto e inicializa el objeto.

Bávaro tiene razón.

Behavior >> new
        "Answer a new instance of the receiver.  If the instance can have indexable variables, it will have 0 indexable variables."

        "Primitive fails if the class is indexable."
        
        self isVariable ifTrue: [^self new: 0].
        self primitiveFailed

Object >> initialize
    "Initialize the object to its default state. This is typically used in a convention that the class implements the #new method to call #initialize automatically. This is not done for all objects in VisualWorks, but the initialize method is provided  here so that subclasses can call 'super initialize' and not get an exception."

    ^self.

valoraciones y comentarios

Recuerda algo, que puedes optar por la opción de parafrasear tu experiencia si topaste tu contratiempo .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *