Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure core.typed+;datomic=没有标签id的读取器函数_Clojure_Datomic_Clojure Core.typed - Fatal编程技术网

Clojure core.typed+;datomic=没有标签id的读取器函数

Clojure core.typed+;datomic=没有标签id的读取器函数,clojure,datomic,clojure-core.typed,Clojure,Datomic,Clojure Core.typed,我刚刚开始使用clojure和core.typed,当我使用以下代码评估(检查ns'stocks.db)时,一直遇到以下错误: (ns stocks.db (:gen-class) (:require [clojure.core.typed :refer [ann HMap]])) (use '[datomic.api :only [q db] :as d]) (ann break-me [String -> (HMap)]) (defn break-me "Do I br

我刚刚开始使用clojure和core.typed,当我使用以下代码评估
(检查ns'stocks.db)
时,一直遇到以下错误:

(ns stocks.db
  (:gen-class)
  (:require [clojure.core.typed :refer [ann HMap]]))

(use '[datomic.api :only [q db] :as d])

(ann break-me [String -> (HMap)])
(defn break-me
  "Do I break cored.typed?"
  []
  {:db/id #db/id[:db.part/db]})
ExceptionInfo没有标签id clojure.core/ex-info的读卡器函数(core.clj:4327)

(打断我)
的计算结果是
{:db/id#db/id[:db.part/db-1000000]}
,正如您所期望的那样

与此类似,冒犯的术语肯定是
#db/id


感谢您的帮助。

我是Clojure和Datomic的新手,但我认为您需要使用Datomic API中的
tempid
函数生成临时id(请参阅)

所以看起来是这样的:

(ns stocks.db
  (:gen-class)
  (:require [clojure.core.typed :refer [ann HMap]]))

(use '[datomic.api :only [q db] :as d])

(ann break-me [String -> (HMap)])
(defn break-me
  "Do I break cored.typed?"
  []
  {:db/id (tempid :db.part/db)})
我在
clojure.edn/read string
中遇到了类似的问题,我还没有完全弄清楚。希望对你有用

更新: 在这段代码中:达托米人似乎在做你自己。因此,在您的例子中,我认为使用
tempid
会起作用,但我认为还有一个更深层次的问题,它似乎与文本
#db/id
有关

更新: 这里:建议使用
tempid
而不是文字

更新: 我找到了一个解决方案,也解决了我的问题。在使用
clojure.core/slurp
将内容作为字符串读取后,我试图从文件中读取模式:
schema.edn
使用
clojure.edn/read string
,并收到类似错误,抱怨
db/id
文本

我实现了这里的
readall
transact-all
函数,效果很好。似乎在使用阅读器解析
#db/id
文本时存在一些隐秘的问题,但仍然没有找到确切的原因

更新: 这是使用一个名为“tagged literals”的Clojure功能,它允许您在类路径根目录下名为
data\u readers.clj
的文件中定义“数据读取器”的映射,该文件应包含一个将解析标记参数的标记名和变量的映射

因此,使用这个
data\u readers.clj
文件:

{minutes my.project/to-minutes
 seconds my.project/to-seconds}
您可以这样做:

#minutes 3
#seconds 4
您可以在此页面底部阅读有关标记文字的内容:


但是,我仍然没有找到
#db/id
标记文字出现问题的原因。我在Clojure group论坛上发布了一个问题:更新:Ben Kamphaus提供了一个很好的解释

我不熟悉Clojure和Datomic,但我认为您需要使用Datomic API中的
tempid
函数生成临时id(请参阅)

所以看起来是这样的:

(ns stocks.db
  (:gen-class)
  (:require [clojure.core.typed :refer [ann HMap]]))

(use '[datomic.api :only [q db] :as d])

(ann break-me [String -> (HMap)])
(defn break-me
  "Do I break cored.typed?"
  []
  {:db/id (tempid :db.part/db)})
我在
clojure.edn/read string
中遇到了类似的问题,我还没有完全弄清楚。希望对你有用

更新: 在这段代码中:达托米人似乎在做你自己。因此,在您的例子中,我认为使用
tempid
会起作用,但我认为还有一个更深层次的问题,它似乎与文本
#db/id
有关

更新: 这里:建议使用
tempid
而不是文字

更新: 我找到了一个解决方案,也解决了我的问题。在使用
clojure.core/slurp
将内容作为字符串读取后,我试图从文件中读取模式:
schema.edn
使用
clojure.edn/read string
,并收到类似错误,抱怨
db/id
文本

我实现了这里的
readall
transact-all
函数,效果很好。似乎在使用阅读器解析
#db/id
文本时存在一些隐秘的问题,但仍然没有找到确切的原因

更新: 这是使用一个名为“tagged literals”的Clojure功能,它允许您在类路径根目录下名为
data\u readers.clj
的文件中定义“数据读取器”的映射,该文件应包含一个将解析标记参数的标记名和变量的映射

因此,使用这个
data\u readers.clj
文件:

{minutes my.project/to-minutes
 seconds my.project/to-seconds}
您可以这样做:

#minutes 3
#seconds 4
您可以在此页面底部阅读有关标记文字的内容:


但是,我仍然没有找到
#db/id
标记文字出现问题的原因。我在Clojure group论坛上发布了一个问题:更新:Ben Kamphaus提供了一个很好的解释

这对我来说很好(没有例外)。你在使用LightTable吗,就像在另一个问题中一样?如果是这样的话,请看:不,我只是在用Clojure 1.5.1和Leiningen 2.3.4运行
lein repl
。注意:它编译和运行良好,仅在评估
(检查ns'stocks.db)
时给出一个错误。我在这里发布了一个关于问题的数据读取器部分的答案:这对我来说很好(没有例外)。你在使用LightTable吗,就像在另一个问题中一样?如果是这样的话,请看:不,我只是在用Clojure 1.5.1和Leiningen 2.3.4运行
lein repl
。注意:它编译并运行良好,仅在评估
(检查ns'stocks.db)
时出现错误。我在这里仅针对问题的数据读取器部分发布了一个答案:如何在
数据读取器.clj
文件中为
#db/id
指定一个条目?我不知道你是什么意思。已经有了一个#db/id的读取器宏。你能澄清一下吗?@DavidShaked你可以在datomic jar文件
data\u readers.clj
文件中看到它的样子,但它应该是这样的:
{db/id datomic.db/id literal}
。请注意,映射格式是新的,标记符号是键,值是一个函数(或指向函数的var),读取器可以调用该函数来读取文本。如何在
data\u readers.clj
文件中为