now*_*mja 2 common-lisp anonymous-class
在Common Lisp中,是否有一种白话用于以Java的方式定义匿名类,用于一次性"小接口实现者"?
例如,
this.addListener(new Listener() {
public void listen() {...}
});
Run Code Online (Sandbox Code Playgroud)
如:
(defgeneric listen (object))
(add-listener #<this>
(make-anonymous-instance
(listen (object) ...)))
Run Code Online (Sandbox Code Playgroud)
Common Lisp方法属于泛型函数,而不是类,因此匿名实例并不真正有意义.根据具体情况,通过闭包或EQL专用器,可以实现类似的目的.
扩展以回应评论:
在CL中定义方法不是顶级的,但不是一个好主意.我建议只是正常添加方法,如果不需要实际实例,可能EQL专门用于符号或其他常量.
如果定义行为内联通常是有用的,那么它表明接口被错误设计并且应该采用闭包而不是对象.如果您无法修复接口本身,那么您可以定义一个类,其唯一目的是包装闭包并添加一个调用该闭包的方法,然后只需创建一个具有适当行为的实例.