Ruby中的空体方法有哪些用途?

ylamdve6  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(95)

最近阅读一本Ruby风格指南,我遇到了一个例子:

def no_op; end

空体方法的目的是什么?

b0zn9rqh

b0zn9rqh1#

创建空方法的原因有很多:

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

可能还有其他原因,但这些都是跃入脑海的原因。您的里程可能会有所不同。

ycggw6v2

ycggw6v22#

可能有几个原因。
一种情况是,当一个类被期望实现一个特定的接口(实际上,在Ruby中没有接口),但是在那个特定的类中,这个方法没有意义。在这种情况下,该方法是为了保持一致性。

class Foo
  def say
    "foo"
  end
end

class Bar
  def say
    "bar"
  end
end

class Null
  def say
  end
end

在其他情况下,它是作为一个临时占位符或提醒。
还有一些情况是故意将方法留空,作为使用该库的开发人员的钩子。它的方法在运行时被调用,使用该库的开发人员可以重写空白方法以执行某些自定义回调。这种方法在过去被一些Rails库使用。

相关问题