Peter Seibel在《实用 Common Lisp》中写道:
返回多个值的机制与实现相关,就像将参数传递给函数的机制一样。几乎所有返回某个子表单值的语言结构都会“传递”多个值,返回子表单返回的所有值。因此,返回调用 VALUES 或 VALUES-LIST 结果的函数本身将返回多个值,而其结果来自调用第一个函数的另一个函数也会返回多个值。等等。
依赖于实现确实让我担心。我的理解是以下代码可能只返回主要值:
> (defun f ()
(values 'a 'b))
> (defun g ()
(f))
> (g) ; ==> a ? or a b ?
Run Code Online (Sandbox Code Playgroud)
如果是这样,是否意味着我应该谨慎使用此功能?
任何帮助表示赞赏。