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 或类似的东西?然后 deTYPE 只需填充那个字段,get-source 就设置好了。

这个计划是否有价值?还有更好的地方来存储文件名和行号吗?

0

评论者:gtrak

我可以使用这个来为 cider 的文件/行来回跳转机制。

对于记录(records),我可以通过推导和找到对应的构造器变量来规避这个问题,但这有点讨厌。

0

评论者:bozhidar

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

0

评论者:jafingerhut

Bozhidar,为问题单投票(在查看问题单时点击页面右侧的“投票”链接)可以帮助将该问题单推高1个投票。

0

评论者:bozhidar

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

0

评论者:alexmiller

如果有人对这个问题做出了贡献(比如提交补丁),我会更加积极推动它。

0

评论者:baptiste

使用这个命令可以为我工作:

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

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