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


 


Tema destacado: [Aporte] Mejores practicas en Java


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting (Moderador: Eleкtro)
| | |-+  [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 1,113 veces)
Eleкtro
VB.Net Dev
Moderador Global
***
Conectado Conectado

Mensajes: 6.871



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

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

➢ Lee el Reglamento general del foro.

• Cada subforo tiene un tema adherido con reglas adicionales, léelo antes de publicar.

• Si publicas un bloque de código en el foro, debes utilizar las etiquetas Geshi:             


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 »

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 por RyogiShiki » En línea

Eleкtro
VB.Net Dev
Moderador Global
***
Conectado Conectado

Mensajes: 6.871



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

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

mil gracias
En línea

➢ Lee el Reglamento general del foro.

• Cada subforo tiene un tema adherido con reglas adicionales, léelo antes de publicar.

• Si publicas un bloque de código en el foro, debes utilizar las etiquetas Geshi:             


Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Error con una variable dentro de una clase con herencia
Programación C/C++
Thaorius 6 1,165 Último mensaje 4 Septiembre 2006, 16:59
por Thaorius
Crear un objeto dentro de otro objeto
Programación Visual Basic
Tokes 7 3,589 Último mensaje 30 Agosto 2010, 05:41
por BlackZeroX (Astaroth)
Problema con objeto dentro de otro objeto
PHP
Skeletron 3 3,755 Último mensaje 5 Enero 2011, 04:10
por Skeletron
[RUBY] Es posible variable distinta dentro de for?
Scripting
tbgio 7 1,147 Último mensaje 27 Julio 2011, 21:54
por tbgio
Objeto de clase heredada en super clase
Java
Baal_30 2 177 Último mensaje 18 Mayo 2015, 22:21
por Baal_30
Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines