如何在常见的lisp中描述,实现和接口

gai*_*epr 1 lisp common-lisp clos

我正在实现一个图形数据结构,将任意对象存储为顶点.我想定义一个接口,比如获取一个对象的键,以便所有顶点都有一个键.在我看来,这听起来像我可能使用像java这样的语言的接口.

interface Vertex {
  String key (Vertex v);
  // etc...
}
Run Code Online (Sandbox Code Playgroud)

如何在常见的lisp中模拟接口的行为?

Jos*_*lor 5

正如Rainer Joswig在评论中提到的,在某些语言使用它们(例如Java)的意义上没有接口,所以你需要做的就是定义一些泛型函数和一个mixin类来指定实现的超类类.

  • @tfb而且,正如BRPocock所提到的,泛型函数确实可以扭转局面。泛型函数可能具有专门针对多个参数的方法。(在尚不可用的语言中,这通常称为[multiple dispatch](https://en.wikipedia.org/wiki/Multiple_dispatch),并且说一个类实现方法的意义并不大:您*必须*问是否有针对某些参数集的专门方法,因为这不是由每个类单独定义行为的。 (2认同)