最近阅读一本Ruby风格指南,我遇到了一个例子:
def no_op; end
空体方法的目的是什么?
b0zn9rqh1#
创建空方法的原因有很多:
undef foo
可能还有其他原因,但这些都是跃入脑海的原因。您的里程可能会有所不同。
ycggw6v22#
可能有几个原因。一种情况是,当一个类被期望实现一个特定的接口(实际上,在Ruby中没有接口),但是在那个特定的类中,这个方法没有意义。在这种情况下,该方法是为了保持一致性。
class Foo def say "foo" end end class Bar def say "bar" end end class Null def say end end
在其他情况下,它是作为一个临时占位符或提醒。还有一些情况是故意将方法留空,作为使用该库的开发人员的钩子。它的方法在运行时被调用,使用该库的开发人员可以重写空白方法以执行某些自定义回调。这种方法在过去被一些Rails库使用。
2条答案
按热度按时间b0zn9rqh1#
创建空方法的原因有很多:
undef foo
和令人惊讶的调用者。可能还有其他原因,但这些都是跃入脑海的原因。您的里程可能会有所不同。
ycggw6v22#
可能有几个原因。
一种情况是,当一个类被期望实现一个特定的接口(实际上,在Ruby中没有接口),但是在那个特定的类中,这个方法没有意义。在这种情况下,该方法是为了保持一致性。
在其他情况下,它是作为一个临时占位符或提醒。
还有一些情况是故意将方法留空,作为使用该库的开发人员的钩子。它的方法在运行时被调用,使用该库的开发人员可以重写空白方法以执行某些自定义回调。这种方法在过去被一些Rails库使用。