The :KEY
参数包含在 Common Lisp 附带的一些函数中。我发现的所有关于它们的描述都没有帮助,并且:KEY
在搜索引擎中很难搜索,因为“:”通常被忽略。
例如,它将如何使用member
函数允许两者:TEST
and :KEY
?
The :key
该论点在引言部分中以某种神秘的方式记录下来序列库(第 17 节)在 Common Lisp HyperSpec 中,在17.2.1 满足双参数测试也17.2.2 满足单参数测试。这是因为它的行为在整个库中是一致的。
很简单,:key
指定应用于正在处理的一个或多个序列的元素的函数。使用函数的返回值来代替这些元素。在某些函数式语言的术语中,这称为“投影”。元素通过关键函数进行投影。你可以想象默认的按键功能是identity
,如果您不提供此参数。
需要理解的一件重要的事情是,在接受某些对象参数和序列的函数中(例如搜索序列以查找对象出现的函数),关键函数是not应用于输入对象;仅针对序列的元素。
第二个重要的事情是:key
不替代该项目,仅替代用于标识该项目的值。例如,搜索序列中的项目的函数将从序列中检索原始项目,即使序列的项目通过以下方式投影到替代键:key
。 key 函数检索到的值仅用于比较。
E.g. if obj-list
是一个对象列表,这些对象的名称可以通过称为的函数访问obj-name
,我们可能会寻找名为的对象"foo"
using (find "foo" obj-list :key #'obj-name)
。功能obj-name
应用于每个元素,并将其结果与字符串进行比较"foo"
(该功能未应用到的地方)。如果至少存在一个具有该名称的对象obj-list
,然后返回第一个这样的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)