覆盖方法为空

时间:2013-03-21 09:39:57

标签: ruby-on-rails ruby oop

是否有最佳实践来在Ruby中实现方法?

即。在子类中,如果我想覆盖一个没有任何东西的方法,那么还有另外一种语法:

class A
  def XX
    [..do something..]
  end
end

class B < A
  def XX
    # Do Nothing
  end
end

我想知道是否有关键字...

class B < A
  void_method :XX
end

...因为代码维护更清晰。

2 个答案:

答案 0 :(得分:4)

没有,它实际上会比

更多的击键
def XX; end

但是你可以轻松添加这样的方法

class A
  def self.void_method name
    define_method(name) {}
  end
end

或者显然,如果您打算在更多地方使用它,可以将其添加到对象中。

答案 1 :(得分:1)

从你的问题中不清楚你想要什么。如果您希望它不返回任何方法错误,请执行以下操作:

class B < A
  undef_method :XX
end

如果您希望它返回nil,请执行以下操作:

class B < A
  def XX *args, &pr; end
end

如果您希望它返回接收器,请执行以下操作:

class B < A
  def XX *args, &pr; self end
end