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

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

0
REPL

clojure.repl/source 不能在 deftype 上工作

用户> (deftype Foo [a b]) user.Foo 用户> (source Foo)找不到源代码

原因: deftype 创建了一个类,但没有 var,因此没有将文件/行信息附加到任何地方。

方法

补丁

审核员

10 个答案

0

评论者:importer

http://www.assembla.com/spaces/clojure/tickets/304 转换而来

0

评论者:importer

stu said: 这看起来是个不错的想法,但鉴于暂时没有迫切的需求,我们将推迟此问题。

0

评论者:importer

[email protected] said: 这是一个很好的问题。get-source 只需要一个文件名和行号。

如果 IMeta 是一个协议,它就可以扩展到 Class 。这种实现可能需要查找一个“已知”的静态字段,比如? __clojure_meta 或其他名称?然后 deftype 就需要填充这个字段,而 get-source 就准备好了。

这个计划有什么优点?文件名和行号是否应该存储在更好的位置?

0

评论由:gtrak发表

我可以利用这一点来实现cider的文件/行跳转机制。

对于record,我可以通过派生和找到对应的构造器变量来解决这个问题,但这有点麻烦。

0

评论由:bozhidar发表

我也很希望看到这个问题被修复。

0

评论由:jafingerhut发表

Bozhidar,为工单投票(在查看工单时点击页面的右侧Vote链接)可以通过1.投票数将工单推高。

0

评论由:bozhidar发表

Andy,谢谢你的提示。他们应该把这个按钮做得更大一些,我之前根本没注意到。

0

评论由:alexmiller发表

如果有人对这个做了些工作(如提交补丁),我会更加努力推动。

0

评论由:baptiste发表

使用下面的方式对我来说是“正常工作”的:→

(source source-training.source/->Foo)

0
参考:https://clojure.atlassian.net/browse/CLJ-304(由 alex+import 报告)
...