14

...就像包裹一样。

我使用 Emacs(也许它可以提供某种解决方案)。

例如(defun the-very-very-long-but-good-name () ...)在后面的代码中没有用处。但是名称 likeFn-15或首字母缩写也没有用。是否可以有一个类似于包的别名,或者在尝试调用函数名称时访问文档字符串?

换句话说,函数是否有可能以某种方式混合自记录和短名称?

4

8 回答 8

40

你想要defalias(defalias 'newname 'oldname)将保留文档,甚至在请求其文档时显示“newname 是 `oldname' 的别名”。

于 2008-10-10T17:23:04.573 回答
5

来自《On Lisp》?代码如下:

(defmacro alias (new-name prev-name)
  `(defmacro ,new-name (&rest args)
     `(,',prev-name ,@args)))

; use: (alias df defun)


(defun group (source n)
  (if (zerop n) (error "zero length"))
  (labels ((rec (source acc)
             (let ((rest (nthcdr n source)))
               (if (consp rest)
                   (rec rest (cons (subseq source 0 n) acc))
                   (nreverse (cons source acc))))))
    (if source (rec source nil) nil)))

(defmacro aliasx (&rest names)
  `(alias
     ,@(mapcar #'(lambda (pair)
                   `(alias ,@pair))
               (group names 2))))

; use: (aliasx df1 defun 
;              df2 defun 
;              df3 defun)
于 2014-01-12T14:12:08.733 回答
5

您可以使用setf将函数分配给另一个函数单元格,例如:

(defmacro alias (new-name prev-name)
  `(setf (symbol-function ,new-name) (symbol-function ,prev-name))) 
于 2014-04-28T05:12:41.847 回答
4

如果是所有类型导致不希望继续使用长名称,那么是的,emacs 可以提供帮助。退房abbrev-mode。在这种情况下也深思熟虑的是hippie-expand.

如果是可读性问题,那就更难了。

于 2008-10-14T16:49:06.667 回答
0

如果您的问题是您不记得很长的函数名称,但您记得名称的一部分,这就是“apropos”的用途。在我的 Emacs 中,我将“Ch a”绑定到“hyper-apropos”。您输入要查找的符号的子字符串,它会列出所有匹配项。

于 2008-10-10T16:23:13.350 回答
0

我不知道 Emacs,但不会(定义短名称 longnamefunctionblahblah)工作吗?

于 2008-10-10T16:27:19.473 回答
-1

您可以简单地拥有一个只调用另一个函数的函数。

于 2008-10-10T16:25:44.407 回答
-1

您可以使用(defmacro ...)别名函数

于 2008-10-10T17:15:02.513 回答