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

欢迎!请参阅关于页面以获取更多关于这个功能的信息。

0
REPL

clojure.repl/source 在 deftype 上不工作

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

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

方法

修补

已筛选

10 答案

0

评论者:importer

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

0

评论者:importer

stu说:这似乎是个合理的想法,但现在我们将把这个问题放在一边,除非我们有忽视的严重用例。

0

评论者:importer

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

如果 IMeta 是一个协议,它可以扩展到 Class。那个实现可能需要寻找一个“已知”静态字段,也许?__clojure_meta或者其他?然后deftype只需填写那个字段,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
参考: https://clojure.atlassian.net/browse/CLJ-304(由 alex+import 报告)
...