在clojure中,我经常使用以下代码:
(into [] (range 3))
Run Code Online (Sandbox Code Playgroud)
但后来我看到这个代码被使用:
(apply vector (range 3))
Run Code Online (Sandbox Code Playgroud)
这两个代码示例之间有什么区别?比另一个更习惯吗?何时使用to init集合,以及何时使用apply + factory函数?
你调用它们的方式,两个函数的结果是一样的.但是,语义apply和into完全不同.
apply用于通过一组参数来评估作为参数接收的函数,该参数也作为参数接收.(apply vector (range 3))导致致电(vector 0 1 2)into通过重复应用将集合减少到另一个集合conj.(into [] (range 3))结果(conj (conj (conj [] 0) 1) 2).关于哪一个更惯用,这进入了意见领域.我建议在你的特定情况下使用任何显示意图.我可能会使用into您在注释中引发的特定用例(从惰性seq构建具体类型).我认为它更容易阅读:
(into [] (get-the-lazy-seq))
;; vs
(apply vector (get-the-lazy-seq))
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的,有可能是在两个调用的内存占用和性能上的差异,但他们依靠这么多你的环境,我会建议,如果你关心这个使用分析器.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |