欢迎!请参阅关于页面以获取更多关于这个功能的信息。
clojure.repl/source 在 deftype 上不工作
user> (deftype Foo [a b]) user.Foo user> (source Foo) 没有找到源代码
原因:deftype 创建了一个类但不创建 var,因此没有任何文件/行信息被附加到任何地方。
方法
修补
已筛选
评论者:importer
从 http://www.assembla.com/spaces/clojure/tickets/304 转换而来
stu说:这似乎是个合理的想法,但现在我们将把这个问题放在一边,除非我们有忽视的严重用例。
[email protected]说:这是一个很好的问题。get-source只需要一个文件名和行号。
如果 IMeta 是一个协议,它可以扩展到 Class。那个实现可能需要寻找一个“已知”静态字段,也许?__clojure_meta或者其他?然后deftype只需填写那个字段,get-source 就可以正常工作了。
这个计划是否有价值?是否有更好的地方来存储文件名和行号?
评论人:gtrak
我可以利用这个功能,用于cider的文件/行跳转机制。
对于记录(records),我可以通过推断和找到相应的构造器变量来解决这个问题,但这样做有点复杂。
评论人:bozhidar
我也希望能解决这个问题。
评论人:jafingerhut
Bozhidar,在工单上投票(点击查看工单时的右侧“投票”链接)可以帮助提升工单在列表中的排名。每个投票可以提高排名1位。
Andy,谢谢你的提示。他们应该把这个按钮做得更大些,我直到现在才注意到。
评论人:alexmiller
如果有人对这个问题进行了工作(例如提交一个补丁),我会更加努力地推进。
评论人:baptiste
使用下面的方式在我这里“工作”:
(source source-training.source/->Foo)