elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Ruby] Modificar variable de un objeto dentro de una clase
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ruby] Modificar variable de un objeto dentro de una clase  (Leído 3,202 veces)
Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.877



Ver Perfil
[Ruby] Modificar variable de un objeto dentro de una clase
« en: 22 Febrero 2012, 05:24 am »

Citar
En Ruby, puedes volver a abrir una clase y modificarla.

Código
  1. class Anfitrion
  2.   attr_accessor :nombre
  3. end

Se supone que eso da acceso a la variable "nombre" dentro de la clase "Anfitrion", Bien, Lo que no explica es luego como poder modificar la variable, ¿Se hace como con una variable de instancia?

Para modificar una variable de instancia es así, verdad?:
Código
  1. @nombre = "lo que sea"

?

Muxas Gracias..


En línea



RyogiShiki


Desconectado Desconectado

Mensajes: 745


げんしけん - Hikkikomori FTW!!!


Ver Perfil WWW
Re: [Ruby] Modificar variable de un objeto dentro de una clase
« Respuesta #1 en: 23 Febrero 2012, 03:26 am »

Cierto, es como dices, con el arroba prefijado.

Una vez tienes attr_accesor puedes acceder a la variable a através de la creación de una nueva clase. Por ejemplo supongamos que tengo esta clase:

Código
  1. class Rectangulo
  2. attr_accessor :base, :altura
  3. end

Para modificar los atributos (como se le llama a una variable propia de una clase) simplemente se instancia (crea) un nuevo objeto de dicha clase para obtener acceso a dichos atributos de la siguiente forma:

Código
  1. rect = Rectangulo.new
  2.  
  3. rect.base = 2
  4. rect.altura = 4
  5.  
  6. puts "Base: #{rect.base}, Altura:  #{rect.altura}""

también se pueden usar attr_reader, o attr_writer dependiendo si es una variable que solo se puede leer o solo se puede escribir.

Podemos también definir un método de la siguiente manera y obtener un valor de el:

Código
  1. class Rectangulo
  2. attr_accessor :base, :altura, :area
  3.  
  4. def area
  5. @area = @base * @altura
  6. end
  7. end
  8.  
  9. rect = Rectangulo.new
  10.  
  11. rect.base = 2
  12. rect.altura = 4
  13.  
  14. puts "Base: #{rect.base}, Altura:  #{rect.altura}"
  15. puts rect.area
  16.  

Podemos agregar un inicializador (no confundir con constructor, este no es un constructor, porque estrictamente no construye el objeto, solo le da valores a los atributos) como el siguiente (un inicializador siempre se debe escribir con initialize):

Código
  1. class Rectangulo
  2. attr_accessor :base, :altura, :area
  3.  
  4. def initialize(base, altura)
  5. @base = base
  6. @altura = altura
  7. end
  8.  
  9. def area
  10. @area = @base * @altura
  11. end
  12. end

Lo que nos permite entonces inicializar los atributos del objeto en el momento de su instanciación, entonces de la siguiente manera podremos crear un nuevo objeto de tipo rectangulo:

Código
  1. class Rectangulo
  2. attr_accessor :base, :altura, :area
  3.  
  4. def initialize(base, altura)
  5. @base = base
  6. @altura = altura
  7. end
  8.  
  9. def area
  10. @area = @base * @altura
  11. end
  12. end
  13.  
  14. rect = Rectangulo.new(2, 4)
  15.  
  16.  
  17. puts "Base: #{rect.base}, Altura: #{rect.altura}"
  18. puts rect.area
  19.  

Verás que de esta forma si intentas crear el objeto sin mandarle valores para que asigne a sus atributos así:

Código
  1. rect= Rectangulo.new

Lanzará un error de argumentos insuficientes. Lo que está genial porque en el método area ya no tendremos que preocuparnos si los valores de la base y la altura están inicializados para poder realizar la operación.

Saludos.


« Última modificación: 23 Febrero 2012, 06:28 am por RyogiShiki » En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.877



Ver Perfil
Re: [Ruby] Modificar variable de un objeto dentro de una clase
« Respuesta #2 en: 23 Febrero 2012, 10:52 am »

No creo que pudiera hacer eso sin tus ejemplos
En resumen, me queda mucho que aprender XDDD

mil gracias
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Crear un objeto dentro de otro objeto
Programación Visual Basic
Tokes 7 7,105 Último mensaje 30 Agosto 2010, 05:41 am
por BlackZeroX
Problema con objeto dentro de otro objeto
PHP
Skeletron 3 6,522 Último mensaje 5 Enero 2011, 04:10 am
por Skeletron
[RUBY] Es posible variable distinta dentro de for?
Scripting
tbgio 7 3,350 Último mensaje 27 Julio 2011, 21:54 pm
por tbgio
Acceder a una variable privada de una clase desde otra clase
Programación C/C++
Alvaro093 4 30,466 Último mensaje 27 Enero 2012, 09:46 am
por wachi
Objeto de clase heredada en super clase
Java
Baal_30 2 2,074 Último mensaje 18 Mayo 2015, 22:21 pm
por Baal_30
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines