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

欢迎参观!请查看 关于 页面以了解更多关于这个网站如何工作的信息。

0
REPL

clojure.repl/source 在 deftype 上不起作用

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

原因:deftype 创建了一个类但不创建变量,因此没有将文件/行信息附加在任何位置。

方法

补丁

审查

10 个答案

0
0

评论者:importer

stu 说:这听起来是个不错的想法,但是如果我们疏忽了紧急使用情况,目前我们会将其暂时放在一边。

0

评论者:importer

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

如果 IMeta 是一个协议,它可以通过 Class 扩展。那种实现可以在“已知”静态字段中查找,比如?__clojure_meta 或者类似的东西?然后 deftype 只需要填写那个字段,get-source 就可以设定好了。

这个计划有优势吗?有更好的地方来存储文件名和行号吗?

0

评论者:gtrak

我可以将这个用于 cider 的文件/行跳转机制。

对于记录,我可以通过派生和找到相应的构造器 var 来解决这个问题,但这有点棘手。

0

评论者:bozhidar

我也愿意看到这个问题被修复。

0

评论者:jafingerhut

Bozhidar,在工单上投票(在查看工单时点击页面右边的“投票”链接)可以帮助将其在工单列表中向上提升 1 票。

0

评论者:bozhidar

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

0

评论者:alexmiller

如果有人做了相关工作(比如提交补丁),我会更积极地推动。

0

评论者:baptiste

使用这个就能“正常工作”:=>

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

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