Như của Ruby 2.1, trong khi Module#constants
chỉ bao gồm các hằng số nào, nếu bạn đặt inherit=false
, bạn sẽ nhận được hằng tin là tốt. Vì vậy, nếu bạn tìm thấy một hằng số trong constants(false)
nhưng không phải trong constants
(và bạn không quan tâm đến các hằng số kế thừa), đó có thể là một cách ít hoặc đáng tin cậy để biết liệu đó là riêng tư hay không.
class Module
def private_constants
constants(false) - constants
end
end
module Foo
X = 1
Y = 2
private_constant :Y
end
puts "Foo.constants = #{Foo.constants}"
puts "Foo.constants(false) = #{Foo.constants(false)}"
puts "Foo.private_constants = #{Foo.private_constants}"
# => Foo.constants = [:X]
# => Foo.constants(false) = [:X, :Y]
# => Foo.private_constants = [:Y]
này được cung cấp tài liệu, và tôi không chắc chắn nếu nó cố ý, nhưng theo kinh nghiệm nó hoạt động. Tôi sẽ trở lại với các bài kiểm tra đơn vị.
Cập nhật: Dường như đây là a bug in Ruby, và có thể biến mất trong một phiên bản tương lai.
Nguồn
2016-05-03 19:48:04
Vui lòng giải thích bạn đang có kế hoạch sử dụng cái gì. –
Ruby không có hằng số riêng tư. Gần nhất bạn có thể nhận được là một biến lớp, nhưng đó không phải là khủng khiếp riêng tư, vì nó được chia sẻ với tất cả các lớp con. – Linuxios
@RyanBigg Tôi không có bất kỳ sử dụng cho nó. Tôi không hiểu sự liên quan của câu hỏi của bạn với câu hỏi của tôi. – sawa