我推測,也許天真地說,Clojure中的單個字符串將是平等的,無論它們是如何生成的。Clojure:字符文字相等
(= "G" "G")
=>
true
(= "G" \G)
=>
false
(= \G \G)
=>
true
事實並非如此。誰能解釋爲什麼?
我推測,也許天真地說,Clojure中的單個字符串將是平等的,無論它們是如何生成的。Clojure:字符文字相等
(= "G" "G")
=>
true
(= "G" \G)
=>
false
(= \G \G)
=>
true
事實並非如此。誰能解釋爲什麼?
一個字符是而不是與單字符字符串相同。相反,單字符字符串可以被認爲是其第一個也是唯一一個字符的序列。
(type "G")
;=> java.lang.String
(type \G)
;=> java.lang.Character
(count "G")
;=> 1
(count \G)
;=> UnsupportedOperationException count not supported on this type: Character
(seq "G")
;=> (\G)
(seq \G)
;=> IllegalArgumentException Don't know how to create ISeq from: java.lang.Character
(first "G")
;=> \G
(first \G)
;=> IllegalArgumentException Don't know how to create ISeq from: java.lang.Character
只是爲了完整...與Clojure不同,ClojureScript的行爲與OP推測的完全相同。由於Javascript沒有字符類型,只有字符串,所以ClojureScript字符被實現爲單字符字符串。
在ClojureScript REPL:
(= "G" "G")
;=> true
(= "G" \G)
;=> true
(= \G \G)
;=> true
(type "G")
;=> #object[String "function String() {
;=> [native code]
;=> }"]
(type \G)
;=> #object[String "function String() {
;=> [native code]
;=> }"]
附加說明和實踐也可作爲[Clojure的Koans]的一部分(https://github.com/functional-koans/clojure-koans) – imranolas