La instanciación y el método de inicialización

click fraud protection

01

de 02

La instanciación y el método de inicialización

Aprendiendo Ruby on Rails: jugando con irb
brnzwngs / Flikr / CC BY 2.0

Cuando define una clase en Ruby, Ruby asignará un nuevo objeto de clase al nombre de clase constante. Por ejemplo, si tuvieras que decir Persona de clase; final, esto es más o menos equivalente a Persona = Clase.nuevo. Este objeto de clase es del tipo Clasey contiene varios métodos útiles para hacer instancias de copias de esas instancias.

02

de 02

Hacer instancias

Para hacer una nueva instancia de una clase, llame a esa clase nuevo método. Por defecto, esto asignará la memoria requerida para la clase y devolverá una referencia al nuevo objeto. Entonces, si tuviera que hacer una nueva instancia de la Persona clase, llamarías Persona nueva.

Si bien al principio esto parece un poco al revés, no hay nuevo palabra clave en Ruby o cualquier sintaxis especial. Los nuevos objetos se crean a través de un método normal que, dicho y hecho, hace cosas relativamente simples.

Inicializando instancias

Un objeto en blanco no es muy emocionante. Para comenzar a usar su objeto, primero debe inicializarse (suponiendo que tenga alguna

instagram viewer
variables de instancia eso necesita inicializarse). Esto se hace a través de inicializar método. Ruby le pasará cualquier argumento que le pase a SomeClass.new a inicializar en el nuevo objeto. Luego puede usar asignaciones de variables normales y métodos para inicializar el estado del objeto. En este ejemplo, un Persona se presenta la clase cuya inicializar El método tomará un argumento de nombre y edad, y los asignará a variables de instancia.

clase Person def initialize (nombre, edad) @name, @age = name, end end end end bob = Person.new ('Bob', 34)

También puede aprovechar esta oportunidad para adquirir los recursos que pueda necesitar. Red abierta enchufes, abrir archivos, leer cualquier información que necesite, etc. La única advertencia es que la gente generalmente no espera inicializar métodos para fallar. Asegúrese de documentar cualquier posible falla inicializar métodos a fondo.

Destorying Objects

En general, no destruyes objetos en Ruby. Si viene de C ++ u otro lenguaje sin un recolector de basura, esto puede parecer extraño. Pero en Ruby (y en la mayoría de los otros idiomas recolectados de basura), no destruye objetos, simplemente deja de referirse a él. En el próximo ciclo de recolección de basura, cualquier objeto sin nada que se refiera a él se destruirá automáticamente. Hay algunos errores con referencias circulares, pero en general esto funciona a la perfección y ni siquiera necesita un "destructor".

Si te estás preguntando acerca de los recursos, no te preocupes por eso. Cuando el objeto que contiene el recurso es destruido, el recurso será liberado. Los archivos abiertos y las conexiones de red se cerrarán, la memoria se desasignará, etc. Solo si asigna recursos en una extensión C, realmente tendrá que preocuparse por desasignar recursos. Aunque no hay garantía de cuándo se ejecutará el recolector de basura. Para desasignar recursos en un oportuno de manera, intente liberarlos manualmente.

Hacer copias de objetos

Ruby es pasar por referencia. Si pasa una referencia a un objeto a un método, y ese método llama a un método que modifica el estado de ese objeto, pueden ocurrir consecuencias no deseadas. Además, los métodos pueden guardar la referencia al objeto para modificarla mucho más tarde, causando un efecto retardado para el error. Para evitar esto, Ruby proporciona algunos métodos para duplicar objetos.

Para duplicar cualquier objeto, simplemente llame al some_object.dup método. Se asignará un nuevo objeto y se copiarán todas las variables de instancia del objeto. Sin embargo, copiar variables de instancia es lo que se suponía que esto debía evitar: esto es lo que se llama una "copia superficial". Si si tuviera que mantener un archivo en una variable de instancia, los dos objetos duplicados ahora se referirían al mismo archivo.

Solo tenga en cuenta que las copias son copias superficiales antes de usar el dup método. Ver el articulo Hacer copias profundas en Ruby para más información.

instagram story viewer