定数を再定義しようとすると、Ruby は警告のみを表示し、エラーは表示しません。では、いつでも Ruby で定数を再定義できるのでしょうか?
send メソッドを使用して、クラスのプライベート メソッドを呼び出すこともできます。
Const = 12
puts Const
#only an warning: already initialized constant Const
Const = 14
puts Const #Displays 14
class MyClass
private
def priv
puts 'In private method'
end
end
obj = MyClass.new
#Error: private method `priv' called for #<MyClass:0x7f2cfda21738> (NoMethodError)
#obj.priv
#but this is fine!
obj.send(:priv)
Ruby でのそのような設計の背後に何か根拠はありますか? これらは、それぞれ定数とアクセス指定子の基本的な考え方に違反していませんか?
これらのデザインの実際の実用的な用途はありますか? いくつかの例があれば素晴らしいでしょう!
注:ここでは、Ruby の定数とプライベート メソッドに関する多くの質問や議論が見られますが、これらの背後にある理由に関連するものは見つかりませんでした。