首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >core.async和clojure.core命名空间元素似乎发生冲突。

core.async和clojure.core命名空间元素似乎发生冲突。
EN

Stack Overflow用户
提问于 2014-10-03 05:12:22
回答 2查看 551关注 0票数 2

我正在尝试修改草书,这是一个用于Clojure语言的Intellij插件。我已经通过莱茵导入了一个非常标准的新应用程序,现在我尝试使用一些core.async构造。

以下是项目定义:

代码语言:javascript
复制
(defproject app "0.1.0-SNAPSHOT"
  :description "Clojure project illustrating basic core.async constructs"
  :dependencies [[org.clojure/clojure "1.5.1"]
             [org.clojure/core.async "0.1.346.0-17112a-alpha"]])

来文提交人:

代码语言:javascript
复制
(ns app.core)

(require '[clojure.core.async :as async :refer :all])

(let [c (chan 10)]
  (>!! c "hello")
  (println (<!! c))
  (close! c))

基本Clojure构造工作,没有任何问题。但是,在Lein中添加core.async依赖项之后,每次我尝试运行一段代码时,都会出现以下警告:

代码语言:javascript
复制
WARNING: partition-by already refers to: #'clojure.core/partition-by in namespace: app.core, being replaced by: #'clojure.core.async/partition-by
WARNING: map already refers to: #'clojure.core/map in namespace: app.core, being replaced by: #'clojure.core.async/map
WARNING: into already refers to: #'clojure.core/into in namespace: app.core, being replaced by: #'clojure.core.async/into
WARNING: reduce already refers to: #'clojure.core/reduce in namespace: app.core, being replaced by: #'clojure.core.async/reduce
WARNING: partition already refers to: #'clojure.core/partition in namespace: app.core, being replaced by: #'clojure.core.async/partition
WARNING: take already refers to: #'clojure.core/take in namespace: app.core, being replaced by: #'clojure.core.async/take
WARNING: merge already refers to: #'clojure.core/merge in namespace: app.core, being replaced by: #'clojure.core.async/merge

它似乎是某种名称空间冲突。

有什么简单的方法来解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-03 10:54:32

名称空间存在的原因是为名称提供上下文,以便它们可以被重用。这只是一个例子。通过使用:refer :您正在尝试引入许多与clojure.core函数冲突的函数。我通常只在ns中引入更多的core.async语法元素的子集,并为其余的元素创建一个别名:

代码语言:javascript
复制
(require '[clojure.core.async :as async :refer [>! <! >!! <!! go]])

大多数重叠的名称现在实际上已被废弃,并将在未来被删除,因为它们不再需要与传感器。例如,不使用clojure.core.async.take,您将创建一个包含clojure.core.take转换器的chan,该转换器带有Clojory1.7。

票数 5
EN

Stack Overflow用户

发布于 2014-10-03 05:12:22

原来有一种排除元素的方法。这有点排他性,就像我想象的那样,core.async非常流行,会有一种避免基本名称冲突的默认方法。但是,遗憾的是,下面是修改后的ns/require语句,它帮助我启动并运行:

代码语言:javascript
复制
(ns app.core
  (:refer-clojure :exclude [map reduce into partition partition-by take merge])
  (:require [clojure.core.async :refer :all :as async]))

发现这里是吉突布

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26173582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档