我正在读一本书,我对以下代码的作用感到困惑:
(defmethod execute ((o ORDER) (l SIMUL) (e MARKETUPDATE))
(values
(list (make-TRADE :timestamp (timestamp e)
:price (price e)
:quantity (orderquantity o)))
NIL))
我获得此函数的源代码表示它返回两个值。我的问题是身体的作用。根据我的理解,第3-5行创建了一个包含:timestamp
,:price
,:quantity
的列表。我对么?那么values
,第二行怎么样?它也会返回这个变量吗?任何摘要都会有帮助。感谢
答案 0 :(得分:2)
这是一个泛型函数的方法,专门研究类型order
,simul
和marketupdate
的参数。
它返回2 values
:
答案 1 :(得分:0)
如果没有更多的上下文,为什么make-trade的结果包含在列表中很难猜测,但我猜在某些情况下执行可以分成N个交易。
我怀疑你的混乱几乎完全是因为这是你第一次遇到使用价值观。 Common Lisp允许函数返回多个值。这与任何语言允许函数接收多个参数的方式略有相似。
这些多个返回值非常有效地实现。大多数新手在整数除法函数上第一次遇到多个值,这将返回余数作为其第二个值。哈希表查找将返回第二个值,以指示密钥是否实际在表中,因为为密钥存储的值可能为零。
在您的示例中,第二个值是NIL,可能其他执行方法可能会返回更有趣的内容 - 例如,在更新Q中,订单是放置的位置,或者如果出现错误则是错误代码。当然,查看手册中的价值观将充满教育价值(原文如此)。
答案 2 :(得分:0)
此函数是一个使用关键字值返回两个值的方法。看一下CLOS,以便更好地理解面向对象和“值”,以便返回多个值。