有没有办法从Ruby中的一个实例调用一个私有的Class方法?

前端之家收集整理的这篇文章主要介绍了有没有办法从Ruby中的一个实例调用一个私有的Class方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
除了self.class.send:方法,args …,当然.我想在类和实例级别做一个相当复杂的方法,而不会重复代码.

更新:

@Jonathan Branam:这是我的假设,但我想确保没有人找到办法. Ruby中的可见性与Java非常不同.你也很正确,私有对类方法不起作用,尽管这将声明一个私有类方法

class Foo
  class <<self
    private
    def bar
      puts 'bar'
    end
  end
end

Foo.bar
# => NoMethodError: private method 'bar' called for Foo:Class

解决方法

这是一个与这个问题一起的代码片段.在类定义中使用“private”不适用于类方法.您需要使用“private_class_method”,如以下示例所示.
class Foo
  def self.private_bar
    # Complex logic goes here
    puts "hi"
  end
  private_class_method :private_bar
  class <<self
    private
    def another_private_bar
      puts "bar"
    end
  end
  public
  def instance_bar
    self.class.private_bar
  end
  def instance_bar2
    self.class.another_private_bar
  end
end

f=Foo.new
f=instance_bar # NoMethodError: private method `private_bar' called for Foo:Class
f=instance_bar2 # NoMethodError: private method `another_private_bar' called for Foo:Class

我没有办法解决这个问题.该文档说您不能指定一个私有方法的接收.此外,您只能从同一实例访问私有方法. Foo类是与Foo的给定实例不同的对象.

不要以我的答案为最终.我当然不是专家,但我想提供一个代码片段,以便其他尝试回答的人将具有适当的私有类方法.

猜你在找的Ruby相关文章