欢迎!有关您如何使用本站的更多信息,请参阅 关于 页面。
clojure.repl/source 不能在 deftype 上工作
用户> (deftype Foo [a b]) user.Foo 用户> (source Foo)找不到源代码
原因: deftype 创建了一个类,但没有 var,因此没有将文件/行信息附加到任何地方。
方法
补丁
审核员
评论者:importer
从 http://www.assembla.com/spaces/clojure/tickets/304 转换而来
stu said: 这看起来是个不错的想法,但鉴于暂时没有迫切的需求,我们将推迟此问题。
[email protected] said: 这是一个很好的问题。get-source 只需要一个文件名和行号。
如果 IMeta 是一个协议,它就可以扩展到 Class 。这种实现可能需要查找一个“已知”的静态字段,比如? __clojure_meta 或其他名称?然后 deftype 就需要填充这个字段,而 get-source 就准备好了。
这个计划有什么优点?文件名和行号是否应该存储在更好的位置?
评论由:gtrak发表
我可以利用这一点来实现cider的文件/行跳转机制。
对于record,我可以通过派生和找到对应的构造器变量来解决这个问题,但这有点麻烦。
评论由:bozhidar发表
我也很希望看到这个问题被修复。
评论由:jafingerhut发表
Bozhidar,为工单投票(在查看工单时点击页面的右侧Vote链接)可以通过1.投票数将工单推高。
Andy,谢谢你的提示。他们应该把这个按钮做得更大一些,我之前根本没注意到。
评论由:alexmiller发表
如果有人对这个做了些工作(如提交补丁),我会更加努力推动。
评论由:baptiste发表
使用下面的方式对我来说是“正常工作”的:→
(source source-training.source/->Foo)