Common Lisp对象系统(CLOS)是否支持鸭子打字?

时间:2012-02-17 19:37:09

标签: lisp common-lisp

我正在阅读“Practical Common Lisp”,我想知道Common Lisp是否支持Duck-Typing,例如红宝石?

在Ruby中,只要它实现了一个带有调用者假定的名称和参数列表的方法,就可以在一个对象上调用一个方法而不管该类。

CLOS怎么样?是否可以在不考虑类的情况下调用对象,只需假设泛型函数可以处理它。也许不需要鸭子输入,因为CLOS不遵循消息传递哲学,方法也没有绑定到类。

1 个答案:

答案 0 :(得分:14)

  

也许不需要鸭子输入,因为CLOS不遵循传递哲学的消​​息,并且方法没有绑定到类。

情况确实如此。每个泛型函数都可以动态地专用于某个类。还可以有默认实现。由于Lisp使用动态类型,因此可以使用任何类型的参数调用每个函数,对于泛型函数,基于参数类型的调度决策是在运行时获取的。