DEFGENERIC + DEFMETHOD 与 DEFUN 的实施方式?

问题描述 投票:0回答:1

我有文件

R
和两个文件
A
B

R
始终加载。

A
xor
B
根据平台功能加载。我有一个无论平台如何都应该存在的函数,称之为
F

使用的优点/缺点是什么:

  1. DEFGENERIC
    位于
    F
    中的
    R
    上,然后
    DEFMETHOD
    位于
    F
    A
     中的 
    B
  2. DEFUN
    位于
    F
    上,
    A
    B
    '

从表面上看,它们应该是相同的。这不仅仅是一个偏好问题吗?

我目前正在使用第一种方法,因为它清楚地表明该函数是通用的并且具有实现,但我很好奇为什么它与第二种方法相比如此重要。

common-lisp
1个回答
0
投票

在我看来,在您的情况下使用

defgeneric
defun
的优点或缺点与一般情况没有什么不同,这意味着与通用函数和常规函数之间的通常选择相比,这里没有额外的限制。

一般来说,函数更简单,使用起来可能更高效,因为它们的要求更少(无调度、无方法组合等),但在实践中,存在很多优化,使区别变得不那么重要.

如果你有一个平台

A'
,通用函数可以帮助你,它几乎像
A
,但有一些调整,在这种情况下你可以专门化一些方法。

在您的问题中,您考虑了两种选择,但请注意,您不仅限于此。例如,参见 Slime 定义了两个宏,

definterface
defimplementation
,来注册一组必要的后端函数及其在各个平台上的实现。

您还可以查看按约定调用的各种库

trivial-*stuff*
,它们将各种特定于实现的代码合并在一起,以便在统一的接口下执行
*stuff*
操作。

© www.soinside.com 2019 - 2024. All rights reserved.