2024 Clojure状态调查中分享您的想法!

欢迎!有关如何使用本站点的更多信息,请参阅关于页面。

0
错误

有几个框架示例尝试将Java类名解缠绕为Clojure符号(包括命名空间);这在报告异常时输出改进的、针对Clojure的特定堆栈跟踪非常有用。

现有的库依赖于正则表达式匹配和猜测,有时会给出错误的结果,例如,当命名空间或函数名实际上包含下划线时。

对于此类框架的作者来说,如果Clojure在类上公开一个带有应出现在堆栈跟踪中的正确名称的静态最终字段将很有帮助;库然后可以利用反射来访问字段的正确名称,而无需当前的猜测。

我建议将CLOJURE_SOURCE_NAME作为此类字段的合理名称。

其他Clojure类构造,如具体化的类型和协议实现,也会从中受益,尽管明确识别该类所扮演的具体字符串值可能不那么明显。

6 回答

0

评论由:亚历克斯·米勒(alexmiller)发表的:

顺带一提,针对(version 1.6)的补丁已提交,其中包含编译器中的一个新解缠绕函数。但是,由于名称被破坏的方式并不总是可逆的,因此保留原始名称是个好主意。

0

评论者:jafingerhut

Alex提到的补丁已附加到CLJ-1083。

0

评论者:jafingerhut

Howard,看来这个请求和CLJ-1278在意图上有所重叠。我想,没有另一个也能完成,但想确认一下。

0

评论者:dsg

这是我尝试添加此功能的初步尝试。

一些说明

  • 这将标记由{{deftype}}和{{fn}}发出的类。
  • 这将处理包含的{{fn}},但输出将与标准{{demunge}}函数略有不同:只有初始的{{$}}被转换成{{/}}。
  • 不幸的是,因为类型/记录构造函数的{{defn}}在{{let}}形式中发生,生成的符号不匹配期望的。
  • 没有公开的API可以从类中获取去munged符号。也许{{demunge}}应该检查给定的名称是否对应于具有此字段的类?

我欢迎任何关于这应该如何真正工作的反馈。特别是,关于如何最好处理不是顶级形式的{{defn}}的想法。

0

评论者:jafingerhut

补丁CLJ-1284-store-demunged-names.patch(日期为2014年8月20日)在2014年8月29日对Clojure进行了一些提交后不能干净地应用到最新的master上。我并没有检查在此日期之前它是否能够干净地应用,也没有检查更新此补丁可能有多容易或有多难。

0
参考:https://clojure.atlassian.net/browse/CLJ-1284(由hlewisship报告)
...