【发布时间】:2010-09-24 01:09:03
【问题描述】:
我有一个两部分的问题
最佳实践
- 我有一个算法,它使用公共接口对数据结构执行一些操作
- 它目前是一个具有许多静态方法的模块,除了一个公共接口方法外,所有静态方法都是私有的。
- 有一个实例变量需要在所有方法之间共享。
这些是我能看到的选项,哪个最好?:
- 模块带有静态(ruby 中的“模块”)方法
- 类与静态方法
- Mixin 模块,用于包含在数据结构中
- 重构算法中修改该数据结构(非常小)的部分,并使其成为调用算法模块的静态方法的 mixin
技术部分
有没有办法制作一个私有模块方法?
module Thing
def self.pub; puts "Public method"; end
private
def self.priv; puts "Private method"; end
end
里面的private好像没有任何作用,我还是可以毫无问题地拨打Thing.priv。
【问题讨论】:
-
仅供参考,ruby 中没有“静态”方法,它们被称为类实例方法
-
一个旧评论,但由于它有四个赞成票,我必须指出没有“类实例方法”这样的东西。 “类方法”是正确的术语。
-
private只影响实例方法,不影响类方法。改用private_class_method:module Thing; def self.pub; end; private_class_method :pub; end -
@micapam Ruby 中确实存在类实例方法,它们与类方法不同。
标签: ruby private-methods access-specifier