Elisp获取函数的参数个数?

3

1
我很好奇...为什么你认为help-function-arglist不是非常可靠?它管理函数、宏、别名、自动加载等。 - juanleon
我对 help-function-arglist 没有任何问题 - 它的工作非常出色。 但是通过处理 help-function-arglist 的输出来获取参数数量,对我来说就像解析手册或进行谷歌搜索一样。 - abo-abo
如果函数的名称是function-arglist,你会有不同的感受吗? :-) 在我看来,名称中的帮助有些偶然性,因为它被放置在文件中(源代码中有一条注释说该函数可能会移动到subr.el)。 话虽如此,该函数的源代码提示我获取elisp函数的arity并不是非常直接,但我对此并不是很了解。 - juanleon
1
我遇到了一种比“解析”出arity更极端的方法:多次使用不同的参数调用函数,看它是否返回错误。我笑得在地上打滚:) - abo-abo
@abo-abo:你可能已经在地上打滚了,但这是在代码中必须与旧版本的Emacs一起工作的正确方法,因为没有好的测试arity的方法。是的,很遗憾Emacs没有像function-arity这样的通用函数。有subr-arity,但它只适用于内置函数。 - Drew
显示剩余2条评论
2个回答

3

并不存在绝对稳定的函数-参数个数。 在大多数情况下,人们想要的是根据函数接受的参数个数不同(例如在不同的 Emacs 版本中其签名不同)以不同的方式调用函数,此时“尝试使用多个参数调用它并捕获潜在错误”的方法就是最好的选择。


在我的例子里,我正试图将 "exptxy" 解析成 (expt x y)。重点是不应该将其解析成 (exp t x y),因为 exp 具有 1 种元数。 - abo-abo

1

关于help-function-arglist,我没有发现任何问题,它在这里的功能正常。

然而,指向lambda-arity的一些bug仍然存在。

例如:

(optional-arglist (memq '&optional arglist))

我建议您使用“成员 '&optional'”,它将返回剩余的列表,从而使得可以计算剩下的元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接