在Clojure中应用的习惯用法

pca*_*cao 1 clojure

对不起,如果这是一个真正基本的问题,但我见过的一些代码让我很好奇.

这个apply功能的惯用法是什么?

例如,我见过以下形式编写的代码:

(distinct [1 2 3 4 5 6])
Run Code Online (Sandbox Code Playgroud)

(apply distinct? [1 2 3 4 5 6])
Run Code Online (Sandbox Code Playgroud)

这些返回相同的结果,甚至在文档中,它清楚地说:

;; 请注意以下两种形式的等效性

user =>(apply str ["str1""str2""str3"])"str1str2str3"

user =>(str"str1""str2""str3")"str1str2str3"

这个例子是否过于基本无法传达实用性apply?或者我错过了两者之间的根本区别?

什么时候一种形式被认为最好?

Mat*_*w H 5

user=> (apply str ["str1" "str2" "str3"]) "str1str2str3"

user=> (str "str1" "str2" "str3") "str1str2str3"
Run Code Online (Sandbox Code Playgroud)

在此示例中,使用的优点apply是它可以采用字符串列表.str,本身,不能.

我不是专家,但我的直觉说apply除非必要,否则你不应该使用.因此,如果您有一组要传递给可变函数的值,apply则很有用 - 否则,只需使用plain函数,例如str.