我正在读一本书,我对以下代码的作用感到困惑:
(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
呢?它也返回这个变量吗?任何总结都会有帮助。谢谢
发布于 2014-05-20 04:31:26
这是一个泛型函数的方法,专门处理order
、simul
和marketupdate
类型的参数。
它返回2 values
list
创建的长度为1的list
,该函数包含一个trade
类型的对象(可能(但不一定是由defstruct
创建),该对象具有时隙timestamp
、price
和quantity
。nil
.您可能可以使用函数trade
&c ( trade-timestamp
&c)访问defstruct
的插槽(除非defstruct
表单不是平凡的,或者trade
根本不是由defstruct
定义的)。
发布于 2014-05-20 13:04:00
如果没有更多的上下文,为什么make的结果被包装在列表中是很难猜测的,但我猜想在某些情况下执行可以被拆分为N个交易。
我怀疑你的困惑几乎是完整的,因为这是你第一次遇到价值观的使用。通用Lisp允许函数返回多个值。这与任何语言允许函数接收多个参数的方式略有相似。
这些多个返回值非常有效地实现。大多数新手第一次在整数除法函数上遇到多个值,这将返回一个余数作为他们的第二个值。哈希表查找将返回第二个值,以指示键是否实际在表中,因为为该键存储的值可能为零。
在您的示例中,第二个值为零,其他执行方法可能会返回更有趣的内容--例如,在更新Q中,订单位于何处,如果发生错误,则返回错误代码。当然,检查手册的价值观将充满教育价值(原文如此)。
发布于 2014-05-21 05:08:52
此函数是通过使用关键字值返回两个值的方法。查看CLOS,以更好地理解面向对象和返回多个值的方法的“值”。
https://stackoverflow.com/questions/23750854
复制相似问题