clojureで使用される::は何ですか?


83

Clojureのキーワードを理解してい:keywordます。しかし、何のために::使用されますか?なぜバインディングがあるように見えるのですか?

user=> :foo
:foo
user=> ::foo
:user/foo

回答:


83

二重コロンは、キーワードを現在の名前空間で完全に修飾するためにあります。これは、さまざまなライブラリにとって意味のあるキーワードの名前の衝突を回避することを目的としています。完全修飾キーワードがないと、マップ内の一部の値を誤って上書きし、ライブラリとの互換性を損なう可能性があります。


提供された理論的根拠に関しては、そもそもなぜ図書館が彼らのために扱うことになっている地図をいじくり回すのかよくわかりません。それが本当に主な動機である場合、いくつかの解明が役立つかもしれません。
マタンスター2017年

3
1つの例として、リングミドルウェア(サーブレットフィルターと同様)があります。これを使用して、HTTPリクエストを説明するマップを強化できます。名前空間キーを使用すると、リングアプリで構成されている他のミドルウェアとの干渉を心配することなく、カスタムミドルウェアを記述して値を追加できます。
skuro 2017年

27

ClojureおよびClojureScriptについて現在文書化さているよう::キーワードを使用して名前空間エイリアスを解決することもできます。たとえば、はのエイリアスであるかどうか::foo/barを評価します。名前空間に解決されない場合、リーダー例外がスローされます。:clojure.core/barfooclojure.corefoo



また、Clojure 1.9以降、ここで説明するように、マップのキーワードを解決するためにマップと一緒に使用されるis#:および#::syntaxも関連しています
Joe Corneli
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.