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


 


Tema destacado: [AIO elhacker.NET 2013] Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting (Moderadores: Leo Gutiérrez., 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,011 veces)
Eleкtro
Moderador
***
Conectado Conectado

Mensajes: 5.828


"En teoría, la teoría y la práctica son lo mismo."


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

Como insertar un código:

 

-> Reglas del foro <-
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
Moderador
***
Conectado Conectado

Mensajes: 5.828


"En teoría, la teoría y la práctica son lo mismo."


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

Como insertar un código:

 

-> Reglas del foro <-
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines