web-dev-qa-db-ja.com

Java.lang.Stringを呼び出さずにclojureの文字列が等しいかどうかを確認するにはどうすればよいですか?

文字列の同等性をチェックする方法はclojureにありますか?つまり、場所ではなく、内容が等しいかどうかを知る必要があります。

ありがとう。

37

Clojureの同等性(=関数)は常にIDではなく値をテストするため、2つの文字列が同じ内容の場合は=になります。

ほとんどのJavaタイプ(文字列を含む)の場合、Clojure =はJava .equalsString.equals =は、「同じ文字列を表す」と定義されています。

IDをテストする場合(これらのポインターはメモリー内の同じ場所にありますか?)、identical?関数を使用します。

52
Stuart Sierra
(= "hello" (str "hel" "lo"))
; => true 

JVMには、値ごとに最大1つのエントリを保持する文字列プールがあるため、IDと値の同等性は同じ比較になります。 StringBuilder.String.を使用する方法はいくつかありますが、これは厳密には当てはまりませんが、clojure等価関数は.equalsを呼び出すため、IDが異なる場合は値の比較が実行されます。

8
Mike Douglas