10

我已经定义了一个Vehicle这样的模块

module Vehicle
  class <<self
    def build
    end

    private

    def background
    end
  end
end

调用Vehicle.singleton_methods返回[:build]

如何检查由定义的所有私有单例方法Vehicle

4

1 回答 1

10

在 Ruby 1.9+ 中,您可以简单地执行以下操作:

Vehicle.singleton_class.private_instance_methods(false)
#=> [:background]

在 Ruby 1.8 中,事情有点复杂。

Vehicle.private_methods
#=> [:background, :included, :extended, :method_added, :method_removed, ...]

将返回所有私有方法。您可以通过以下方式过滤大部分在外面声明的内容

Vehicle.private_methods - Module.private_methods
#=> [:background, :append_features, :extend_object, :module_function]

但这并不能完全解决所有问题,您必须创建一个模块才能做到这一点

Vehicle.private_methods - Module.new.private_methods
#=> [:background]

最后一个不幸的要求是创建一个模块只是为了把它扔掉。

于 2012-08-27T03:07:21.490 回答