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

欢迎!请参阅关于页面以获取更多关于这是如何工作的信息。

0
REPL

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

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

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

方法

补丁

由请求筛选

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 的文件/行跳转机制做同样的事情。

在记录中,我可以通过推导和找到对应的构造器变量来解决这个问题,但这有点繁琐。

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 报告)
...