(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
并在他们的代码中发现了这个问题。如果我正确地遵循代码,那么他们在这之后的是函数的arity,但他们得到一些“奇怪的”数字。发生了什么事?
此外,这篇文章:Elisp get function arity?提供了一个更好的解决方案(工作得很好,AndreasRöhler的答案。所以我可能会尝试向magit
维护者提出建议。
答案 0 :(得分:1)
确实为lexical-binding
引入了“aref字节码0”中的“数字”。更好的解决方法是丢弃magit-max-args-internal
并改为使用(condition-case nil (delete-directory <args>) (wrong-number-of-arguments (delete-directory <fewerargs>))
。