我想有这样的事情:如何只允许一个类访问另一个类的方法?
class A
def only_B_can_call_me
'called_by_B'
end
end
class B
def do_stuff(a)
a.only_B_can_call_me
end
end
class C
def do_stuff(a)
a.only_B_can_call_me # how to forbid it?
end
end
B.new.do_stuff(A.new) # => 'called_by_B'
C.new.do_stuff(A.new) # => it should not be allowed!!! but how to do it?
的一种方式做到这一点是让only_B_can_call_me
的私有方法和使用a.send(:only_B_can_call_me)
B. OK里面,它的工作原理。但是我可能会在C里面做同样的事情......所以,我认为这不是一个好方法。有没有其他方法可以做到这一点? (允许一个方法只是通过一个特定的类的实例来访问。)
(我知道,最终总是能够从使用send
任何地点访问任何方法,但我想从send
让自己走在这种情况下。 )
哪个是您的实际Ruby版本? –
我目前在红宝石2.4.1 – Djunzu
那么,我希望我的解决方案能够帮助你,我很乐意提供帮助。我试过了,它的工作原理https://repl.it/Mmt5/6你可以在那里看到 –