Ruby中的私有模块方法是什么?

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

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

我有两个问题

最佳做法

  • 我有一个算法,它使用公共接口对数据结构执行一些操作。
  • 它目前是一个具有许多静态方法的模块,除了一个公共接口方法之外,所有方法都是私有的。
  • 有一个实例变量需要在所有方法之间共享。

这些是我能看到的选择,哪一个是最好的?:

  • 模块使用ruby中的静态(模块)方法
  • 用静态方法
  • 混和模块,以便包含到数据结构中。
  • 重构算法中修改数据结构的部分(非常小),并使其成为调用算法模块静态方法的混合器。

技术部分

有没有办法私有模块法?

module Thing
  def self.pub; puts "Public method"; end
  private
  def self.priv; puts "Private method"; end
end

private在那里似乎没有任何影响

提问于
用户回答回答于

我认为最好的方法(主要是如何编写现有的LIB)是通过在模块中创建一个处理所有逻辑的类来实现的,而模块只是提供了一个方便的方法。

module GTranslate
  class Translator
    def perform( text ); 'hola munda'; end
  end

  def self.translate( text )
    t = Translator.new
    t.perform( text )
  end
end
用户回答回答于

Module.private_class_method可以说是表达了更多的东西

module Foo
  def self.included(base)
    base.instance_eval do
      def method_name
        # ...
      end
      private_class_method :method_name
    end
  end
end

对于问题中的代码:

module Thing
  def self.pub; puts "Public method"; end
  def self.priv; puts "Private method"; end
  private_class_method :priv
end

Ruby2.1或更高版本:

module Thing
  def self.pub; puts "Public method"; end
  private_class_method def self.priv; puts "Private method"; end
end

扫码关注云+社区