В Ruby, как каждый создает частный постоянный класс? (т.е. тот, который видим в классе, но не снаружи),
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
Вы также можете изменить вашу константу на метод класса:
def self.secret
'xxx'
end
private_class_method :secret
Это сделает ее доступной внутри всех экземпляров класса, но не снаружи.
Вместо константы можно использовать @@class_variable, которая всегда является частной.
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
Конечно, тогда рубин ничего не сделает, чтобы обеспечить постоянность @@secret, но рубин делает очень мало для обеспечения постоянности с самого начала, поэтому...