class Foo
@@first_time = true
def self.private_bar
if @@first_time
puts "Hi"
else
puts "Oi, you don't work here"
end
@@first_time = false
end
private_class_method :private_bar
public
def calling_private_method
self.class.send :private_bar
another_private_bar
end
end
f=Foo.new
f.calling_private_method
f.class.send :private_bar
:これは、ルビのカプセル化に違反する簡単な方法ですか?出力はこのようなものでなければなりません
Hi
NoMethodError: private method `private_bar'
ただし、出力は次のようになります。
Hi
Oi, you don't work
ですが、なぜでしょうか?これはバグでなければなりません。それ以外の場合、情報のカプセル化に重大な違反があります。
http://stackoverflow.com/a/896633/10396 – AShelly