Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何检查类中是否直接定义了'initialize'_Ruby - Fatal编程技术网

Ruby 如何检查类中是否直接定义了'initialize'

Ruby 如何检查类中是否直接定义了'initialize',ruby,Ruby,我试图检查初始化是否直接在类中定义。下面是一些示例命令行代码,以说明我尝试执行的操作: class Something def initialize; end end Something.method_defined?(:initialize) # => false 有没有办法检测是否在类中直接定义了initialize?initialize显然总是私有的,因此您需要执行以下操作: Something.private_instance_methods(false).include

我试图检查初始化是否直接在类中定义。下面是一些示例命令行代码,以说明我尝试执行的操作:

class Something
  def initialize; end
end

Something.method_defined?(:initialize)
# => false 
有没有办法检测是否在类中直接定义了initialize?

initialize显然总是私有的,因此您需要执行以下操作:

Something.private_instance_methods(false).include?(:initialize)
错误的论点意味着没有搜索祖先


文档:

您所说的在中定义,而不是在中定义。考虑以下事项:

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 

如果您认为初始化是在A中定义的,我建议您使用上面三个表达式中的最后一个来回答,尽管我可能在pin头上跳舞。

您可以做一些事情。private\u instance\u methods.include?:初始化,但它几乎总是返回true,因为它对于对象类是true。是的,但我想知道initialize方法中是否有代码。代码的意图不清楚。当像您那样定义initialize时,您不希望结果为true吗?不管怎样,现有的私有方法定义了吗?不管怎样,返回true,但这并不表明您的观点。此外,定义了什么方法?因为继承的初始化是私有的,所以您使用的更不相关。您更应该展示一个类的示例,该类的初始化没有像您那样直接定义,并且显示您希望为false。当您进行类似于刚才所做的编辑时,您应该明确它是一个编辑,例如,edit:。。。。。如果不这样做,你可以使评论和回答变得毫无意义。@CarySwoveland我直接添加了这个词,这是OP想要表达的,但没有表达出来,我删除了定义内容。除此之外,我没有改变内容。我的注释适用于编辑之前或之后的代码。