Как я делаю частные константы класса в Ruby

В 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
38
задан Andrew Grimm 27 March 2012 в 23:29
поделиться

3 ответа

Вы также можете изменить вашу константу на метод класса:

def self.secret
  'xxx'
end

private_class_method :secret

Это сделает ее доступной внутри всех экземпляров класса, но не снаружи.

12
ответ дан 27 November 2019 в 02:59
поделиться

Ну ...

@@secret = 'xxx'.freeze

вроде работает.

1
ответ дан 27 November 2019 в 02:59
поделиться

Вместо константы можно использовать @@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, но рубин делает очень мало для обеспечения постоянности с самого начала, поэтому...

9
ответ дан 27 November 2019 в 02:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: