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

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

0
错误

有几个框架的例子尝试将 Java 类名解构为一个 Clojure 符号(包括命名空间);这在报告异常时记录一个改进的、针对 Clojure 的特定堆栈跟踪很有用。

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

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

我建议将此类字段命名为 CLOJURE_SOURCE_NAME。

除了函数之外的其他 Clojure 类结构,例如具体化类型和协议实现,也会受益,尽管确切字符串值可以正确且明确地标识类扮演何种作用这一点可能不那么明显。

6 个答案

0

评论者:alexmiller

FYI,1.6 版本中即将推出一个补丁,其中包含编译器中新添加的 demunge 函数。然而,由于 munged 名称并不总是可逆的,因此保留原始名称是一个好主意。

0

评论者:jafingerhut

亚历克斯提到的补丁已附加到CLJ-1083。

0

评论者:jafingerhut

霍华德,这个工单和CLJ-1278之间似乎有一些意图上的重叠。我想以任一方式完成这些而无需另一方的帮助,但还是想确认一下。

0

评论者:dsg

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

一些注释

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

我欢迎任何有关应该如何真正工作的意见。特别是,关于如何最好地处理非顶层形式的{{defn}}的任何想法。

0

评论者:jafingerhut

补丁CLJ-1284-store-demunged-names.patch(日期为2014年8月20日)在2014年8月29日在Clojure上做出一些提交后无法干净地应用于最新主代码库。我没有检查它在之前的日期是否可以干净地应用,也没有检查更新此补丁可能有多容易或多困难。

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