Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 我的日志记录(与robert hooke一起)无法与tools一起正常工作。名称空间/refresh,为什么?_Clojure_Namespaces - Fatal编程技术网

Clojure 我的日志记录(与robert hooke一起)无法与tools一起正常工作。名称空间/refresh,为什么?

Clojure 我的日志记录(与robert hooke一起)无法与tools一起正常工作。名称空间/refresh,为什么?,clojure,namespaces,Clojure,Namespaces,编辑:原来我在名称空间声明中使用了require而不是:require。使用:require,tools.namespace刷新日志名称空间,问题就消失了。然而,我仍然感到奇怪的是,表达式(eval`(var~(symbol“A/func”))在下面描述的情况下不起作用(即,如果下面的B没有刷新) 小结:我正在使用tools.namespace。如果我有名称空间A和B,并且在B中执行(eval`(var~(symbol“A/func”))和(tools.namespace/refresh)并运行

编辑:原来我在名称空间声明中使用了
require
而不是
:require
。使用
:require
,tools.namespace刷新日志名称空间,问题就消失了。然而,我仍然感到奇怪的是,表达式
(eval`(var~(symbol“A/func”))
在下面描述的情况下不起作用(即,如果下面的B没有刷新)

小结:我正在使用tools.namespace。如果我有名称空间A和B,并且在B中执行
(eval`(var~(symbol“A/func”))
(tools.namespace/refresh)
并运行代码,那么就可以了。但是,如果我对a进行了更改,则执行
(tools.namespace/refresh)
,这样只有一个刷新,然后运行该表达式会出现错误:
无法在此上下文中解析var:a/func
,即使
a/func
存在。为什么?

较长版本:

在我的项目中,我有一个使用的日志模块/名称空间(见下文)。我正在使用在进行更改时重新加载代码

问题在于:当我想记录(我的日志目前只是打印)某个内容时,我列出了我想在我的日志名称空间中记录的函数,并执行
(t.n/refresh)
。这很有效。但是,如果我对包含要记录的函数的名称空间进行更改,并且在不更改记录名称空间的情况下执行
(t.n/refresh)
,则记录将不再有效(对于已刷新的函数)。一旦我对日志进行了更改,以便tools.namespace也会刷新日志,它就会重新开始工作

因此,这就像名称空间中已刷新的变量没有正确地获取其日志挂钩一样。但我不明白为什么

下面是我的日志名称空间。每次运行程序时,我都会调用
addloggingwrappers

如果我在
添加日志包装中添加
(eval`(var~(symbol“sv/register damage”)
,当日志刚刚刷新并且日志正常工作时,这是可以的。但是,当日志记录不起作用时,该表达式会导致错误
无法在此上下文中解决var:sv/寄存器损坏问题

(ns game.logging)
(要求[robert.hooke:as rh]
[clojure.pprint:as pp]
[game.server.core:as sv]
[game.client.core:as cl]
[游戏。数学:作为数学]
(game.common[核心功能:作为ccfns]
[图形:如gfx所示])
(game.server[寻路:作为pf]))
(:使用[game.utils]))
(defn log println[名称类型对象]
(println(str(当前线程名称)“/”name“类型”:\n
(不带str)
(pp/pprint对象(()()))
(定义打印输出[名称f和参数]
(让[结果(应用参数)]
(记录println名称“输出”结果)
结果)
(定义打印输入[名称f和参数]
(日志println name“input”参数)
(应用f参数)
(定义打印呼叫[名称f&args]
(println(str(当前线程名称)“/”名称)
(应用f参数)
(defmacro生成名称变量列表[fn列表]
`[~@(对于[fn-fn-list]
[(str-fn)`(var~fn)])]
(defmacro defloglist[名称和fns]
`(def~name(生成名称变量列表[~@fns]))
(defn添加挂钩[命名变量和包装器]
(何时(序号包装器)
(doseq[[name var]name vars]
(右侧/添加挂钩变量(部分(第一个包装器)名称)))
(重复使用名称变量(下一个包装器)))
(定义获取ns名称变量[ns sym]
(>(ns sym)(#(.name%))ns实习生)
(定义将挂钩添加到ns[ns sym和wrappers]
(应用添加挂钩(获取ns name vars ns sym)包装器)
(defloglist记录两个
sv/distribute exp;;>(所有ns)(map(.name%))(mapcat ns实习生)(map秒)
(右图/清钩)))
(添加钩子日志和打印输出打印输入)
(添加日志输入打印输入)
(添加钩子日志输出打印输出))

在顶部进行编辑并将其转化为答案!