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