我试图检查是否在课程中直接定义了initialize
。这是一些示例命令行代码,用于说明我尝试做的事情:
class Something
def initialize; end
end
Something.method_defined?(:initialize)
# => false
有没有办法检测是否在类中直接定义了initialize
?
答案 0 :(得分:6)
initialize
显然总是私密的,所以你需要这样做:
Something.private_instance_methods(false).include?(:initialize)
false
参数表示不搜索祖先。
文档:http://ruby-doc.org/core-2.2.2/Module.html#method-i-private_instance_methods
答案 1 :(得分:1)
你说"在"中定义,而不是"在"上定义。请考虑以下事项:
class A
module B
private
def initialize; end
end
include B
end
A.private_instance_methods.include?(:initialize)
#=> true
A.private_instance_methods(false)
#=> []
A.instance_method(:initialize).owner
#=> A::B
如果您在initialize
"中考虑A
被定义"在这里,我建议你通过使用上面三个表达式中的最后一个来回答这个问题(虽然我可能会在引脚的头部跳舞)。