我有一个两部分的问题
最佳实践
- 我有一个算法可以使用公共(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/