什么是Ruby中使用的空体方法?

时间:2014-11-18 00:25:34

标签: ruby methods

目前正在阅读Ruby风格指南,我遇到了一个例子:

def no_op; end

空身方法的目的是什么?

2 个答案:

答案 0 :(得分:3)

您可能会创建一个空方法的原因有很多:

  • 存储您稍后将填写的方法。
  • 存根后代类将覆盖的方法。
  • 确保一个类或对象#respond_to?一个方法,除了返回nil之外不必做任何事情。
  • 取决于继承方法的行为,同时仍然允许它#respond_to?消息,而不是在公共方法和令人惊讶的呼叫者上使用undef foo

也可能有其他原因,但那些是想到的。您的里程可能会有所不同。

答案 1 :(得分:1)

可能有几个原因。

一种情况是,当一个类需要实现一个特定的接口时(实际上,假设在Ruby中没有接口),但在那个特定的类中,该方法没有意义。在这种情况下,该方法保持一致。

class Foo
  def say
    "foo"
  end
end

class Bar
  def say
    "bar"
  end
end

class Null
  def say
  end
end

在其他情况下,它会被留作临时占位符或提醒。

在某些情况下,该方法有意留空,作为使用该库的开发人员的钩子。它在运行时调用的方法,使用该库的开发人员可以覆盖blank方法以执行一些自定义回调。过去,一些Rails库使用了这种方法。