2011-09-27 19 views

risposta

1

Per definire una variabile di classe, utilizzare un @@:

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

    def print 
     puts @@description 
    end 
end 
0

variabili di istanza devono essere preceduti con un @ e non sono accessibili dall'esterno. Le variabili di classe devono essere precedute da un @@.

La prima volta che si utilizza questa variabile ovunque nel codice, verrà inizializzata. Se si desidera accedere al valore dall'esterno:

attr_reader :description 

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

+1

'attr_reader 'funziona solo per variabili di istanza, non per variabili di classe. Se stai usando Rails, puoi usare 'cattr_reader' per fare ciò. – zetetic

+0

ma ho visto un esempio di codice utilizzare una variabile come ho fatto io, quindi è legale? – user875883

+1

@ user875883 Quello sarebbe uno strano esempio di codice. Forse si trattava di mostrare come una variabile locale definita a livello di classe NON sia compresa nell'ambito dei metodi. –

4

Nel tuo caso, l'description è unica variabile locale. È possibile modificare questo ambito utilizzando caratteri speciali @, @@, $:

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

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

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

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

per il vostro scopo, penso che potrebbe essere utilizzato in questo modo

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

È possibile accedere alla classe-ambito utilizzando define_method .

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

> User.new.print
Sono classe User variabile
=> nil

Non credo che sia una buona idea, però :)

Problemi correlati