16

rPython では、文字列リテラル (生の文字列) の前に anを付けて、インタープリターに文字列内の特殊文字を変換しないように指示できます。

>>> r"abc\nsdf#$%\^"
r"abc\nsdf#$%\^"

Clojure で同じことを行う方法はありますか?

4

3 に答える 3

15

Clojure 文字列は Java 文字列であり、リーダーはその解釈に重要なことを何も追加しません。リーダー ページには、「標準の Java エスケープ文字がサポートされています」とだけ書かれています。

ただし、エスケープでき\ます:

user> (print "abc\\nsdf#$%\\^")
abc\nsdf#$%\^

これはリーダーによって読み取られる文字列リテラルにのみ影響するため、ファイルから文字列を読み取った場合、リーダーはそれらを見ることはありません。

user> (spit "/tmp/foo" "abc\\nsdf#$%\\^")
nil
user> (slurp "/tmp/foo")
"abc\\nsdf#$%\\^"
user> (print (slurp "/tmp/foo"))
abc\nsdf#$%\^nil
user> 

したがって、基本的な答えはノーだと思います。

于 2012-06-15T01:09:19.190 に答える
5

また、反時計回り (Clojure 用の Eclipse プラグイン) を使用している場合は、「スマート ペースト」(デフォルトでは無効) と呼ばれるモードがあり、既存のリテラル文字列内に貼り付けるときに特殊文字を正しくエスケープすることにも注意してください。

于 2012-06-15T11:58:38.300 に答える
2

そのような目的で、リテラル正規表現に使用できる場合があります。

user=> #"abc\nsdf#$%\^"
#"abc\nsdf#$%\^"
user=> (type #"abc\nsdf#$%\^")
java.util.regex.Pattern
user=> (println (str #"abc\nsdf#$%\^"))
abc\nsdf#$%\^
nil
于 2012-06-15T09:34:12.487 に答える