gpt4 book ai didi

clojure - 为什么参数列表为ArraySeq?

转载 作者:行者123 更新时间:2023-12-03 13:28:07 27 4
gpt4 key购买 nike

考虑以下功能:

user> (defn first-args [& args]
(args 0))
#'user/first-args
user> (first-args 1 2 3) ;=> clojure.lang.ArraySeq cannot be cast to clojure.lang.IFn


为什么参数列表是 clojure.lang.ArraySeq,而不是像 PersistentVector这样更常见的东西?还是为什么 ArraySeq不实现 IFn?性能原因?似乎您在执行Clojure时必须了解一些底层的实现。随时启发我。

PS:这个问题不是关于“这是惯用的吗?”只是问为什么会这样。

最佳答案

(defn first-args [& args]
(first args))

(apply first-args (range))
;=> 0


您可以将函数应用于无限的参数序列,仅在需要时才使用项。如果要求 & args是一个向量(或者比ISeq更具体的东西),那将是不可能的。

至于为什么不能调用seq:它会鼓励以性能很差的方式使用它们。

关于clojure - 为什么参数列表为ArraySeq?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8205209/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com