使用静态方法调用私有方法的Ruby类?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

我有一个有很多静态方法的类。每个人都必须调用一个常用的方法,但我试图不公开后一种方法。将它私有化只允许从一个自己的类的实例访问?受保护似乎并不能解决这里的问题。

如何隐藏do_calc在静态上下文中被外部调用?

class Foo
  def self.bar
    do_calc()
  end
  def self.baz
    do_calc()
  end
  def self.do_calc
  end
end
提问于
用户回答回答于

首先,static,不是Ruby术语的真正组成部分。

我们举一个简单的例子:

class Bar
  def self.foo
  end
end

你可以做的是使用class << self语法来打开包含类的元类,并将其中的方法定义为实例方法:

class Foo
  class << self

    def bar
      do_calc
    end

    def baz
      do_calc
    end

    private

    def do_calc
      puts "calculating..."
    end
  end
end

这会给你你需要的:

Foo.bar
calculating...

Foo.baz
calculating...

Foo.do_calc
NoMethodError: private method `do_calc' called for Foo:Class
用户回答回答于

你可以用private_class_method像这样定义一个私有类方法:

class Foo
  def self.bar
    do_calc
  end

  def self.baz
    do_calc
  end

  def self.do_calc
    #...
  end
  private_class_method :do_calc
end

扫码关注云+社区