Tag: 访问说明符

ruby中的“个人”方法

我正在寻找一种使方法“个人化”的方法 – 注意不要私有给一个class级 这是一个例子 – 通过“个人”我的意思是方法“foo”的行为 class A def foo “foo” end end class B < A def foo "bar" end end class C < B end a=A.new; b=B.new;c=C.new 我正在寻找一种产生以下行为的方法 a.foo #=> “foo” b.foo #=> “bar” c.foo #=> “foo” (ultimate base class method called)

在运行时将实例方法设为私有

在将该对象注册到另一个对象后,我需要将一些实例方法设为私有。 我不想冻结对象,因为它必须保持可编辑状态,只有较少的function。 而且我不想取消这些方法,因为它们是在内部使用的。 我需要的是: class MyClass def my_method puts “Hello” end end a = MyClass.new b = MyClass.new a.my_method #=> “Hello” a.private_instance_method(:my_method) a.my_method #=> NoMethodError b.my_method #=> “Hello” 有任何想法吗?

在Ruby中声明“私有”/“受保护”时实际发生了什么?

在Ruby类定义中声明private / protected时实际发生了什么? 它们不是关键字 ,因此这意味着它们必须是方法调用,但我无法找到它们的定义位置。 它们似乎没有记录。 声明private / protected方法(如下所示)的两种不同方式是否以不同方式实现? (第二种方式显然是一种方法调用,但这在第一种方式中并不那么明显。) class Foo private def i_am_private; end def so_am_i; end end class Foo def i_am_private; end def so_am_i; end private :i_am_private, :so_am_i end

如何将方法动态定义为私有?

这似乎不起作用: class Test private define_method :private_method do “uh!” end end puts Test.new.private_method

“私人”是否有充分的理由像Ruby一样工作?

我花了一段时间才了解私有方法在Ruby中是如何工作的,这让我觉得非常尴尬。 有谁知道私人方法是否有充分的理由按照它们的方式处理? 这只是历史原因吗? 还是实施原因? 还是有很好的合理逻辑(即语义)? 例如: class Person private attr_reader :weight end class Spy < Person private attr_accessor :code public def test code #(1) OK: you can call a private method in self Spy.new.code #(2) ERROR: cannot call a private method on any other object self.code #(3) ERROR!!! cannot call a private method explicitly on […]