2024 Clojure现状调查! 中分享您的想法。

欢迎!请查看关于页面了解更多关于本网站的详细信息。

0 投票
Clojure

我曾多次遇到需要执行 (symbol ns "bar") 的情况,而现有的方法(symbol (name (ns-name ns)) "bar")似乎并不是唯一的工作方式。在此提供了一些补丁,通过为 Symbol.intern() 添加一个新参数来实现这一点。

关于这个想法的一些讨论,请参阅此处: https://groups.google.com/forum/#!topic/clojure/n25aZ5HA7hc/discussion

6 答案

0 投票

评论者:stu

我不确定我是否喜欢这个,但我希望能够重新考虑名称和命名空间。在进行大量的跨语言工作时,有“我有名称”和“我有命名空间”协议会很好。

有了这样的协议,还可以单独考虑以它们为依据实现 symbol 等。

0 投票

评论者:hiredman

将命名作为协议或接口似乎与当您有一个命名空间在手时能够创建带命名空间的符号没有直接关系。

我认为补丁还不够完善,不仅仅应该支持(symbol ns "foo"),还应该支持(symbol ns 'foo'),因为(symbol 'foo) 和 (symbol "foo") 都可以工作,所以(symbol 'bar 'foo)也应该可以工作,但实际却不行。

如果Named是一个协议,并且您将它扩展到String,并且您使符号函数从一个或两个Named事物创建符号,您仍然需要执行(symbol (ns-name ns) 'foo)或(symbol (ns-name ns) "foo")

0 投票
by

评论者:joegallo

Stuart,我并不反对为Named和Namespaced创建单独的协议的想法。我该如何提出创建这些协议并在Clojure中实现它们的建议?我愿意做这项工作或成为其中一部分。但我作为局外人,不知道下一步该做什么——在Jira上创建工单耗尽了我对整个流程的了解。

0 投票
by

评论者:franks

Joe提出的对于symbol的增强,也应适用于keyword。

参见:http://groups.google.com/group/clojure/browse_thread/thread/222e4abc16df8b20

可能相同的/类似的解决方案适用于这两个问题。

-FrankS.

0 投票
by

评论者:ambrosebs

我曾对此投过票,但我收回了我的票。对于两个参数都是字符串,我认为这是一项正确的实现,但对于符号/命名空间/命名/命名空间事物的组合则不太清楚。

0 投票
by
参考:https://clojure.atlassian.net/browse/CLJ-891(由joegallo报告)
...