根据GigaMonkeys上的Functions,Common Lisp通过
默认的默认值是
有没有一种方法可以区分那些传递了默认值的可选参数和根本没有传递值的情况?
编辑:显然,我链接的页面解释了这一点。
有时候,我们想知道可选参数的值是由调用者提供还是使用默认值。你可以在默认值表达式之后添加另一个变量名到参数规范中,这个变量将绑定到true,如果调用者实际上为该参数提供了一个参数,并且绑定到NIL否则。按照惯例,这些变量通常与实际参数命名相同,结尾加上“-supplied-p”。例如:
&optional
支持可选位置参数,并且默认值可以任意设置。默认的默认值是
nil
。(defun function (mandatory-argument &optional optional-argument) ... )
默认值可以任意设置
(defun function (mandatory-argument &optional (optional-argument "")) ....)
有没有一种方法可以区分那些传递了默认值的可选参数和根本没有传递值的情况?
编辑:显然,我链接的页面解释了这一点。
有时候,我们想知道可选参数的值是由调用者提供还是使用默认值。你可以在默认值表达式之后添加另一个变量名到参数规范中,这个变量将绑定到true,如果调用者实际上为该参数提供了一个参数,并且绑定到NIL否则。按照惯例,这些变量通常与实际参数命名相同,结尾加上“-supplied-p”。例如:
(defun foo (a b &optional (c 3 c-supplied-p))
(list a b c c-supplied-p))