上分享您的看法!

欢迎!请查阅关于页面,获取更多关于如何使用本站的信息。

+2 支持
Clojure
已关闭

ClojureScript已经具备{{uuid}}和{{random-uuid}}函数。这些函数在ClojureScript中非常实用,我认为在Clojure中使用这些函数也有利于提高代码的可移植性。对此有兴趣进行补丁修复吗?

带有以下备注已关闭: Clojure 1.11.0-alpha3增加了`random-uuid`和`parse-uuid`函数

8 答案

+1 支持

评论者:wilkerlucio

(链接: ~alexmiller)我明白使它完全兼容会更好。但说实话,作为一个经常编写CLJC的用户,如果我们只有uuidrandom-uuid(尤其是后者)就能满足我99%的UUID需求,我想对大多数人来说也如此。我们不能先添加那些对所有人都是赢家的部分,然后把详细的UUID设计单独作为一个条目吗?

今天我亲自遇到了这个问题。在`.clj`文件中键入了`uuid`,希望像在ClojureScript中做过一样,从字符串构造一个uuid。导入`java.util.UUID`并调用`UUID/fromString`一切正常,但如果`uuid`是`clojure.core`中的函数,那就太棒了。对于`clojure.core`中的`random-uuid`给予点赞(代替我们目前使用的`UUID/randomUUID`),这样可以提高兼容性。
0 投票
by

评论者:alexmiller

进行这个操作的主要原因可能是可移植性。生成java.util.UUID是最合理的选择,这和ClojureScript中正在做的事情一致吗?也就是说,创建和**使用**uuids相同代码是否可以在两个平台上运行?如果不能,那么可能没有很好的理由这么做。

0 投票
by

评论者:[email protected]

生成java.util.UUID应该是最合理的选择,但这和ClojureScript中正在做的事情一致吗?

ClojureScript定义了自己的UUID类型,因为JavaScript中没有这个类型。[链接](https://github.com/clojure/clojurescript/blob/dd589037f242b4eaace113ffa28ab7b3791caf47/src/main/cljs/cljs/core.cljs#L10088-L10128)。我不太确定你所说的“一致”是什么意思。

也就是说,创建和使用的uuids相同的代码是否可以在这两个平台上运行?

CLJS的UUID不包含Java UUID的所有方法,但重要的功能都有(等价性、从字符串构造、将字符串打印出来)并且这些功能足以在处理UUID时显著提高可移植性。

0 投票
by

评论者:bronsa

clojure 和 clojurescript 都有 uuid 标记的 Literals,这应该已经足够用于互操作了。

0 投票
by

评论者:alexmiller

我了解这一点,只是想知道是否有任何你可能需要在uuid上调用的函数,需要一些可移植的等效功能,就像http://docs.oracle.com/javase/8/docs/api/java/util/UUID.html中的那样。

0 投票
留言人:[email protected]

这里的大部分额外方法都很有用,可以区分多种UUID类型,或者从基于时间的UUID中获取信息。


clockSequence() - 基于时间的
compareTo(UUID val) - 不确定是否需要等效方法?
boolean equals(Object obj) - 无需操作
static UUID fromString(String name) - 构造函数
long getLeastSignificantBits() - 不确定这两个的重要性如何
long getMostSignificantBits()
int hashCode() - 无需操作
static UUID nameUUIDFromBytes(byte[] name) - 这是否有用/重要?
long node() - 仅对基于时间的UUID有用
static UUID randomUUID() - 将实现此功能
long timestamp() - 基于时间的UUID
String toString() - 无需操作
int variant() - 用于区分不同类型的UUID
int version() - 用于区分不同版本的UUID



我可能认为在补丁中包含基于时间的UUID也有道理,但我不确定它们是否值得,并且它们需要添加到CLJS等中。

Clojure代码中有一些方法的使用。
https://github.com/search?l=clojure&q=.getLeastSignificantBits&type=Code&utf8=✓
https://github.com/search?utf8=✓&q=%22.nameUUIDFromBytes%22+language%3Aclojure&type=Code&ref=searchresults

但相比于字面构造函数,少了一个数量级。
https://github.com/search?utf8=✓&q=java+util+UUID+language%3Aclojure&type=Code&ref=searchresults(这是一个有缺陷的搜索查询,但这是我所能做到的最好的)。
0 投票

评论者:alexmiller

我的主要观点可能是:我们与其仅仅考虑uuid/random-uuid函数,不如考虑以下这个问题:我们如何在Clojure/ClojureScript中添加可移植的UUID支持?这是一个更大的工作量,但我认为它更有价值。

因此,我们还需要考虑以下内容(其中一些已经存在,但可能尚未经过可移植性测试):
构造
打印 - 打印,pr,美式打印
读取
哈希码
位转换
字符串转/转字符串
组件提取

然后我认为,考虑这些内容应放入核心还是data.uuid等中很值得探讨。

我认为最好在设计页面上处理这个问题,而不是在这里(这个故障单只是更大问题的一个部分)。也许http://dev.clojure.org/pages/viewpage.action?pageId=950382可以提供一些指导。

0 投票
...