我有以下课程
class Logger
def initialize(message)
@message = message
end
def log
puts @message
end
end
当我访问在类本身而不是在继承链中定义的实例方法时,我只返回[:log]
:
Logger.instance_methods(false) # => [:log]
当在类中未定义initialize方法时,结果相同。我还检查了它是否在继承链中定义;它不是:
Logger.instance_methods.include?(:initialize) # => false
可以单独访问:
Logger.instance_method(:initialize) # => #<UnboundMethod: Logger#initialize>
例如访问其参数:
Logger.instance_method(:initialize).parameters # => [[:req, :opts]]
如何获得所有已定义的方法,包括initialize
?
答案 0 :(得分:4)
实际上initialize
方法是private
。因此
Logger.private_instance_methods(false)
#=> [:initialize]
Logger.private_instance_methods(false) | Logger.instance_methods(false)
#=> [:initialize, :log]
答案 1 :(得分:4)
默认情况下,Ruby类中的所有方法都是公共的 - 任何人都可以访问。尽管如此, 此规则只有两个例外 :在Object类下定义的全局方法,以及任何类的initialize方法。 它们都是隐含的私有。
你可以问你的类,你的班级会告诉你,它是否有方法。看这个private_method_defined?
#!/usr/bin/env ruby
class Foo
def initialize
end
end
Foo.private_method_defined?(:initialize) # => true