(defun magit-max-args-internal (function)
"Return the maximum number of arguments accepted by FUNCTION."
(if (symbolp function)
(setq function (symbol-function function)))
(if (subrp function)
(let ((max (cdr (subr-arity function))))
(if (eq 'many max)
most-positive-fixnum
max))
(if (eq 'macro (car-safe function))
(setq function (cdr function)))
(let ((arglist (if (byte-code-function-p function)
(aref function 0) ; <--------- format changed
(cadr function))))
(if (memq '&rest arglist)
most-positive-fixnum
(length (remq '&optional arglist))))))
我不得不重新编译magit.el
并在他们的代码中发现了这个问题。如果我正确地遵循了代码,那么他们在这里所追求的是函数的数量,但他们却得到了一些“奇怪”的数字。任何想法发生了什么?
另外,这篇博文:Elisp get function arity? 提供了一个更好的解决方案(它可以很好地完成工作,Andreas Röhler 的回答。所以我可能会尝试向magit
维护者推荐它。