gpt4 book ai didi

syntax - Clojure中的匿名函数的fn和#语法之间有区别吗?

转载 作者:行者123 更新时间:2023-12-03 23:20:58 24 4
gpt4 key购买 nike

我是Clojure的新手,并且我已经看到匿名函数的编写方式如下:

(fn [x] (* x x))


并且也喜欢:

#(* % %)


显然,第二个更为简洁。有什么相关的区别吗?每个匿名函数都可以用两种样式表示吗?还有一种惯用的吗?

与此问题相关,我无法确定如何将 (fn [x] [x x])转换为后一种语法。我希望能找到可以澄清这种情况的文档。

最佳答案

最重要的区别是:


(fn ...)可以嵌套,#()不能嵌套
您可以使用(fn [x y] ..)或类似名称更好地命名参数,而不是使用%%2%3等。
您可以使用(fn ...)命名函数以进行递归使用,例如(fn fib [n] (if (<= n 1) 1 (+ (fib (- n 1)) (fib (- n 2)))))
代码生成/操作(fn [...] ...)更容易,因为#()是阅读器宏而不是常规的Clojure形式。
#()更简洁。但是,如果这是一个主要考虑因素,则可能您的优先级有误:-)


我个人的建议是:


在大多数情况下,首选(fn [...] ...)
仅将#()用于非常短的内联函数,例如(map #(+ 2 %) (range 10))
还应考虑通过高阶函数生成匿名函数可能比将它们显式写出更好。 (comp func1 func2)(partial func param1 param2)

关于syntax - Clojure中的匿名函数的fn和#语法之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683403/

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