Ruby中公共类方法中的私有类方法

时间:2018-09-07 18:43:46

标签: ruby

class Foo
  def self.bar()
    puts("bar")
  end
  private_class_method :bar

  def self.foo()
    self.bar()
  end
end

鉴于上面的示例,为什么这样做:

 > Foo.foo()
NoMethodError: private method `bar' called for Foo:Class

代替:

 > Foo.foo()
=> bar

我正在尝试创建由“帮助器”方法Thing.helper(...)等组成的类/名称空间...我希望将内部方法的作用域设为私有范围,以便至少有人必须摆脱困境直接给他们打电话。有什么方法可以实现我想要的?

Java等价物:

class Foo {
  private static void bar() {
    System.out.println("bar");
  }
  public static void foo() {
    bar();
  }
}

1 个答案:

答案 0 :(得分:2)

这是因为您尝试使用显式接收器self调用私有方法。简单尝试

def self.foo
  bar
end