gpt4 book ai didi

string - Clojure 的 "apply"字符串函数

转载 作者:行者123 更新时间:2023-12-02 10:59:48 25 4
gpt4 key购买 nike

clojure.core/apply
([f args] [f x args] [f x y args] [f x y z args] [f a b c d & args])
Applies fn f to the argument list formed by prepending intervening arguments to args.

user=> (apply str (reverse "racecar"))
"racecar"
user=> (str (reverse "racecar"))
"(\\r \\a \\c \\e \\c \\a \\r)"

我不明白这种行为如何与文档一致。我错过了什么?

最佳答案

你的问题不太清楚。我假设您对 reverse 的返回类型感到困惑。

reverse 函数返回一个序列,而不是字符串。如果您对字符串调用reverse,它会将其视为字符序列,从而返回相反的字符序列。

apply 函数允许您获取参数的序列并“解压”它们,以便您可以将它们作为位置参数直接传递给函数。例如,(apply f [a b c]) 相当于 (f a b c)

正如我已经提到的,Clojure 将字符串视为字符序列;因此,(apply str "racecar")(apply str '(\r\a\c\e\c\a\r)) 相同,其中与 (str\r\a\c\e\c\a\r) 相同。因此,当您对该字符序列调用 apply str 时,它会将所有字符连接在一起形成一个新字符串 - 这正是我根据文档所期望的。

如果您只想反转字符串而不需要apply str来获取字符串结果,则应该使用clojure.string/reverse而不是clojure .core/reverse:

user=> (require '[clojure.string :as str])
nil
user=> (str/reverse "hello")
"olleh"

关于string - Clojure 的 "apply"字符串函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099985/

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