1

リーダー ドキュメントから:

キーワードは記号に似ていますが、次の点を除きます。

:fred のように、コロンで開始する必要があります。

「.」を含めることはできません。または名前クラス。

2 つのコロンで始まるキーワードは、現在の名前空間で解決されます

シンボルには、繰り返しのない「:」を 1 つ以上含めることができます。

:my:keywordしたがって、ドキュメントではキーワードとして明示的に許可する必要があるようです。

これは私のREPLで機能します:

user=> {:my:keyword 1}
{:my:keyword 1}

そしてこれはうまくいきます:

user=> {:mykeyword
  #_=> 1}
{:mykeyword 1}

そしてこれでも機能します

=> (clojure.edn/read-string (pr-str {:my:keyword 1}))
{:my:keyword 1}

しかし、これはしません:

user=> {
  #_=> :my:keyword

RuntimeException EOF while reading, starting at line 1
clojure.lang.Util.runtimeException (Util.java:221)

コロンを含むキーワードの直後のハッシュマップ リテラルの途中に改行を入れることはできません。

他のキーワードについてもこれを行うことができます。これは正常に動作します。

user=> {
  #_=> :one
  #_=> 1
  #_=> }
{:one 1}

なんで?これは単なる読み手の気まぐれでしょうか?AFAICT:my:keywordは構文的に有効なキーワードです。他の不一致について心配する必要がありますか?

私は使用しています

REPL-y 0.3.5,
nREPL 0.2.6
Clojure 1.6.0
4

1 に答える 1

0

最後の例が示すように、マップを完成させていないため、ある値で例外をスローすると予想されます:my:keyword。これは私にとってはうまくいきます。

{
 :my:keyword 1
 }
=> {:my:keyword 1}
于 2015-06-15T19:59:39.777 に答える