我在探索clojure并感到困惑。 什么填充空白以使以下表达式eval为true?
(= "foo" ___ (str (seq "foo")))
答案 0 :(得分:29)
您需要使用应用功能:
user=> (apply str (seq "foo"))
"foo"
答案 1 :(得分:6)
实际上没有任何东西可以填空,使表达式(=“foo” _ (str(seq“foo”)))eval为true,因为(str(seq“foo”)) => “(\ f \ o \ o)”这不等于“foo”因此我们已经存在不等式,第三项,无论什么值,填充空白都无法使表达式求值为真
如果你打算问
(= "foo"
(____ str (seq "foo")))
然后答案将适用于亚历克斯的回答。
user> (doc apply)
-------------------------
clojure.core/apply
([f args* argseq])
Applies fn f to the argument list formed by prepending args to argseq.
Apply接受一个函数(在本例中为str)并使用seq
中存在的args调用struser> (seq "foo")
(\f \o \o)
user> (str \f \o \o)
"foo"
哦,顺便说一下:
user> (= 1 1 1)
true
user> (= 1 2 1)
false
答案 2 :(得分:4)
或者你可以使用方便的clojure.string/join
(require 'clojure.string)
(clojure.string/join (seq "foo"))
也会打印"foo"
。您可以使用前面提到的技术定义自己的join
(以避免一直写(apply str seq)
)。