English 中文(简体)
2. 发现一种方法并非压倒一切
原标题:Detecting that a method was not overridden
  • 时间:2009-11-08 19:56:16
  •  标签:
最佳回答

如果您重新使用Ruby 1.8.7或以上,则很容易使用<代码>Method# Owner/

class Module
  def implements_instance_method(method_name)
    instance_method(method_name).owner == self
    rescue NameError
    false
  end
end
问题回答
class A
  def m1; end
  def m2; end
end

class B < A
  def m1; end
  def m3; end
end

obj = B.new
methods_in_class = obj.class.instance_methods(false)  # => ["m1", "m3"]
methods_in_superclass = obj.class.superclass.instance_methods(false)  # => ["m2", "m1"]
methods_in_superclass - methods_in_class  # => ["m2"]

您可以始终到以下几个方面,并看看一下:

a = A.new

a.methods.include?(:method)

鉴于标的<条码>b,作为<条码>B的例,请看一下:<条码>b立即上层有<条码>a_method:

b.class.superclass.instance_methods.include?  a_method 

通知:测试是针对方法名称,而不是符号或方法标的。

<>strong>thus not being overden in B" - Just knowledge that the means is only defined in A is是困难的,因为你可以确定A和B个别情况的方法......因此,我认为很难检验“方法只有A”的定义,因为你必须环绕系统的所有子级和次级,并对其进行测试。





相关问题
热门标签