ruby - Ruby 中的私有(private)模块方法

标签 ruby private-methods access-specifier

我有一个两部分的问题

最佳实践

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

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

  • 模块 带有静态(ruby 中的“模块”)方法
  • Class 使用静态方法
  • Mixin 模块用于包含到数据结构中
  • 重构修改该数据结构(非常小)的算法部分,并使其成为调用算法模块静态方法的混合

技术部分

有什么方法可以制作私有(private)模块方法

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

里面的private好像没有什么作用,我还是可以正常调用Thing.priv

最佳答案

我认为最好的方法(主要是现有库的编写方式)是在处理所有逻辑的模块中创建一个类,并且该模块只提供一个方便的方法,例如

module GTranslate
  class Translator
    def perform(text)
      translate(text)
    end

    private

    def translate(text)
      # do some private stuff here
    end
  end

  def self.translate(text)
    t = Translator.new
    t.perform(text)
  end
end

关于ruby - Ruby 中的私有(private)模块方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/318850/

相关文章:

c++ - 需要理解语句 "Accessability is checked statically and not dynamically in C++"

ruby - 如何显示方法参数中的 nil?

java - 如何返回多个变量和/或使用私有(private) int 方法?

java - java中默认构造函数的访问修饰符是什么?

java - 匿名类、私有(private)方法和反射

PHP 类的私有(private)属性和方法

c++ - 这是关于成员(member)访问规则的正确总结吗?

ruby - 如何在 Ruby 1.9.3 下安装 mysql2 gem?在 2.0.0 下工作

ruby-on-rails - 遇到 :dependent => :destroy and Instance variables 问题

ruby 数据提供者?