我有一个两部分的问题
最佳实践
- 我有一个使用公用接口对数据结构执行某些操作的算法
- 当前,它是具有许多静态方法的模块,除了一个公共接口方法外,所有方法都是私有的。
- 所有方法之间都需要共享一个实例变量。
这些是我可以看到的选项,哪个是最好的?:
- 模块与静态(红宝石“模块”)的方法
- 带有静态方法的类
- Mixin模块,用于包含在数据结构中
- 重构算法中修改该数据结构的部分(非常小),并使之混合,从而调用算法模块的静态方法
技术部分
有什么方法可以使私有Module方法吗?
module Thing
def self.pub; puts "Public method"; end
private
def self.priv; puts "Private method"; end
end
将private
在那里似乎没有任何效果,我仍然可以调用Thing.priv
没有问题。
5
仅供参考,在ruby中没有所谓的“静态”方法,它们被称为类实例方法
—
布拉德(Brad)
一个古老的评论,但由于它有四个缺点,我必须指出,没有“类实例方法”之类的东西。“类方法”是正确的术语。
—
micapam
private
仅影响实例方法,不影响类方法。使用private_class_method
来代替:module Thing; def self.pub; end; private_class_method :pub; end
@micapam类实例方法确实存在于Ruby中,并且与类方法不同。
—
Marnen Laibow-Koser