注释掉导致 clojure 运行时错误的代码
Posted
技术标签:
【中文标题】注释掉导致 clojure 运行时错误的代码【英文标题】:commented out code causing runtime error in clojure 【发布时间】:2012-05-18 07:30:40 【问题描述】:上下文:我正在编写要在 Amazon EMR 中运行的 Cascalog 作业。 Cascalog 是一个基于 clojure 的运行 MapReduce 的库。当作业由于一些奇怪的类加载异常而失败时。
在工作中,我使用了一个名为 geocoder 的库,它是一个基于 clojure 的 geoip 查找库。特别是我使用了查看 maxmind GeoLiteCity.dat 文件的库部分。我发现导致作业失败的代码部分是使用地理编码器库的部分。**
最奇怪的是,虽然删除这部分代码会导致工作成功,但注释掉不会......只是想知道是否有人知道发生了什么?
** 我像这样使用地理编码器库的方式
(ns utils.geoip(:use [geocoder.core]))
然后我的工作将需要以上内容
(ns myjob (:require [utils.geoip :as geoip]))
【问题讨论】:
您遇到的错误是什么? 好的,哪个班?提供尽可能详细的信息。 抱歉——这里有点牵扯。最初我得到的错误看起来像这样:java.lang.ClassNotFoundException: views.visit-facts, compile: (views/ visit_facts.clj:1) at cascalog.Util.tryRequire(Util.java:61) at cascalog.Util .bootSimpleFn(Util.java:65) at cascalog.Util.bootFn(Util.java:72) 最初我认为有人在连字符与下划线问题上出错了;在一项测试中,我将工作的 ns 从views.visit-facts 更改为view.vf,但这只是导致相同的异常出现带有下划线的其他类名 【参考方案1】:您的问题的答案可能取决于您使用哪种技术来注释掉有问题的代码?即您使用的是;
还是多行(comment foo)
宏?
我问的原因是,虽然用 ;
注释掉的代码被完全忽略,但 comment
宏需要语法正确的 S 表达式作为主体;所以一个简单的语法错误可能会导致您认为被忽略的代码中出现意外错误。
换句话说:注释宏不允许任意文本。
【讨论】:
是的,最奇怪的是我用过;因为我知道 (comment ...) 有关于它的属性 所以它的(geoip/get-ip-country !ip-address :> !ip-address)
vs ;(geoip/get-ip-country !ip-address :> !ip-address)
以上是关于注释掉导致 clojure 运行时错误的代码的主要内容,如果未能解决你的问题,请参考以下文章