2012-08-29 9 views
5

E 'possibile scrivere in questo modoIl rubino non ha valori costanti?

class Foo 
MY_CONST = 100 
end 

ed è anche possibile cambiarlo Foo::MY_CONST = 123

Ci sarà un avvertimento da un compilatore Ruby, ma in ogni caso una costante sarà cambiato.

Quindi Ruby non ha valori costanti?

+3

indirettamente correlate - http://stackoverflow.com/questions/2441524/closest-ruby-representation-of-a-private-static-final-and-public-static -final # 2442640 – dfb

+0

Anche correlati: http://stackoverflow.com/q/1977780/38765 –

risposta

3

dipende dal tipo di azione che si desidera eseguire con le costanti.

Se si dispone di un

ARRAY = [1,2,3] 
#and then 
ARRAY << 4 

Rubino non si lamenterà.

Tuttavia, se si

ARRAY = [1,2,3].freeze 
#and 
ARRAY << 4 
#RuntimeError: can't modify frozen Array 

È ancora possibile

ARRAY = [1,2,3,4] 
#warning: already initialized constant ARRAY 
0

Sono costanti semanticamente, quindi puoi aspettarti che le persone non le cambino. Li definirei costanti liberali, vedere http://pastie.org/4608297

+2

Possono essere modificati. Anche se le persone potrebbero non voler cambiarle. –

2

Se freezeFOO, poi cercando di riassegnare FOO::MY_CONST creerà un RuntimeError.

class FOO 
    MY_CONST = 100 
end 

FOO.freeze 
FOO::MY_CONST = 123 

RuntimeError: can't modify frozen Class 
Problemi correlati