2011-09-27 9 views

Respuesta

1

Para definir una variable de clase, utilizan un @@:

class User 
    @@description = "I am a User class variable" 

    def print 
     puts @@description 
    end 
end 
0

Las variables de instancia se debe prefijar con un @ y no son accesibles desde el exterior. Las variables de clase deben tener el prefijo @@.

La primera vez que use esta variable en cualquier parte del código, se inicializará. Si desea acceder al valor desde fuera:

attr_reader :description 

http://rubylearning.com/satishtalim/tutorial.html

+1

'attr_reader 'funciona solo para variables de instancia, no para clases. Si está utilizando Rails, puede usar 'cattr_reader' para hacer esto. – zetetic

+0

pero vi un ejemplo de código usar una variable como lo hice, ¿es legal? – user875883

+1

@ user875883 Ese sería un extraño ejemplo de código. Quizás se trataba de mostrar cómo una variable local definida en el nivel de clase NO está dentro del alcance de los métodos. –

4

En su caso, la description es única variable local. Puede cambiar este ámbito el uso de caracteres especiales @, @@, $:

a = 5 
defined? a 
=> "local-variable" 

@a = 5 
defined? @a 
=> "instance-variable" 

@@a = 5 
defined? @@a 
=> "class variable" 

$a = 5 
defined? $a 
=> "global-variable" 

Para su propósito, creo que podría estar utilizando de esta manera

class User 
    def initialize(description) 
    @description = description 
    end 

    def print 
     puts @description 
    end 
end 

obj = User.new("I am User") 
obj.print 
# => I am User 
2

se puede acceder a la clase el estudio que usan define_method .

class User 
    description = "I am User class variable" 
    define_method :print do 
     puts description 
    end 
end 

> User.new.print
Soy clase User variables
=> nil

No creo que sea buena idea, aunque :)

Cuestiones relacionadas