2024 年 Clojure 调查! 中分享您的见解。

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

0
REPL

clojure.repl/sourcedeftype 上不可用。

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

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

方法

修复

筛选者

10 个答案

0
0

评论者:importer

stu 说:这个想法看起来很合理,但现在这个想法将被放入冷储备中,除非我们遗漏了严重的使用场景。

0

评论者:importer

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

如果 IMeta 是一个协议,可以将其扩展到 Class。那种实现可以查找一个 "well-known" 静态字段,比如?__clojure_meta 或者类似的。然后 deftype 只需要填充那个字段,get-source 就可以正常工作了。

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

0

评论者:gtrak

我可以用这个功能实现cider的文件/行跳转机制。

对于记录(records),我可以通过派生(deriving)并找到对应的构造函数变量(constructor var)来解决这个问题,但这有点难办。

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 (由alexp+import报告)
...