我想知道为什么clojure不会像scala或haskell那样将字符串视为数组。
我希望字符串上有take-while
函数,如下面的scala
scala> "chich and chong".takeWhile(_ != ' ')
res1: String = chich
但是take-while
in clojure似乎不适用于字符串。
user=> (take-while #(not= % " ") "chich and chong")
(\c \h \i \c \h \space \a \n \d \space \c \h \o \n \g)
只是为了确保char / string在clojure中有效,
user=> (= " " " ")
true
user=> (not= 'A " ")
true
take-while
仅适用于矢量。
user=> (take-while #(< % 0) [-3 -2 -1 0 1 2 3])
(-3 -2 -1)
尝试将字符串转换为矢量,但返回与输入相同。
user=> (vec "apple")
[\a \p \p \l \e]
user=> (take-while #(not= % "p") (vec "apple"))
(\a \p \p \l \e)
如何在clojure.string中使用take-while?
答案 0 :(得分:4)
你应该用空格写字符文字而不是字符串:
user=> (take-while #(not= % \space) "chich and chong")
=> (\c \h \i \c \h)
那是因为:
" "
- java.lang.String
\space
- java.lang.Character
答案 1 :(得分:0)
只是要指出您的代码可以在ClojuseScript中运行,因为主机平台(JavaScript)没有字符类型,因此字符表示为单字符字符串。在JVM上虽然字符有自己的类型。