¿Cómo hago constantes de clases particulares en Rubí
-
03-10-2019 - |
Pregunta
En Rubí cómo se puede crear una constante de clase privada? (Uno es decir que es visible dentro de la clase, pero no fuera)
class Person
SECRET='xxx' # How to make class private??
def show_secret
puts "Secret: #{SECRET}"
end
end
Person.new.show_secret
puts Person::SECRET # I'd like this to fail
Solución
También puede cambiar su constante en un método de la clase:
def self.secret
'xxx'
end
private_class_method :secret
Esto hace que sea accesible dentro de todas las instancias de la clase, pero no en el exterior.
Otros consejos
A partir del rubí 1.9.3, usted tiene el método Module#private_constant
, que parece ser exactamente lo que quería:
class Person
SECRET='xxx'.freeze
private_constant :SECRET
def show_secret
puts "Secret: #{SECRET}"
end
end
Person.new.show_secret
# => "Secret: xxx"
puts Person::SECRET
# NameError: private constant Person::SECRET referenced
En lugar de una constante que se puede utilizar un @@ class_variable, que siempre es privada.
class Person
@@secret='xxx' # How to make class private??
def show_secret
puts "Secret: #{@@secret}"
end
end
Person.new.show_secret
puts Person::@@secret
# doesn't work
puts Person.class_variable_get(:@@secret)
# This does work, but there's always a way to circumvent privateness in ruby
Por supuesto, entonces el rubí no hará nada para hacer cumplir la constantness de @@ secreto, pero rubí hace muy poco para cumplir constantness para empezar, así que ...
Bueno ...
@@secret = 'xxx'.freeze
tipo de obras.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow