2012-08-29 45 views
5

Es posible escribir de esta maneraRuby no tiene valores constantes?

class Foo 
MY_CONST = 100 
end 

y también es posible cambiarlo Foo::MY_CONST = 123

Habrá una advertencia de un compilador Ruby, pero de todos modos se puede cambiar una constante.

Entonces, ¿Ruby no tiene valores constantes?

+3

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

+0

También relacionado: http://stackoverflow.com/q/1977780/38765 –

Respuesta

3

depende del tipo de acción que quiera hacer con sus constantes.

Si usted tiene una

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

Ruby no se quejará.

Sin embargo, si

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

Todavía puede

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

Son semánticamente constantes, por lo que puede esperar que las personas no los cambien. Yo los llamaría constantes liberales, vea http://pastie.org/4608297

+2

Se pueden cambiar. Incluso si la gente no quisiera cambiarlos. –

2

Si freezeFOO, a continuación, tratar de reasignar FOO::MY_CONST creará un RuntimeError.

class FOO 
    MY_CONST = 100 
end 

FOO.freeze 
FOO::MY_CONST = 123 

da

RuntimeError: can't modify frozen Class 
Cuestiones relacionadas