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

欢迎!请查看 关于 页面了解有关此功能的更多详细信息。

+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`,希望从字符串中构建一个 uuid,就像在 ClojureScript 中做的那样。导入 `java.util.UUID` 并调用 `UUID/fromString` 运行正常,但如果 `uuid` 是 `clojure.core` 的函数,那就更完美了。对 `clojure.core` 中的 `random-uuid` 也表示赞同,它提高了可移植性(因为我们现在使用的是 `UUID/randomUUID`)。
0

评论由:alexmiller 提出

做这件事的主要原因可能是为了提高可移植性。最好是生成 java.util.UUID,这与 ClojureScript 中所做的是否一致?也就是说,是否可以在这两个平台上使用同样的代码来创建和使用 uuid?如果不可以,那么这样做的理由可能并不充分。

0

评论由:[email protected] 提出

最好是生成 java.util.UUID - 这是与 ClojureScript 中所做的是否一致?

ClojureScript 定义了自己的 UUID 类型,因为在 JavaScript 中不存在。 https://github.com/clojure/clojurescript/blob/dd589037f242b4eaace113ffa28ab7b3791caf47/src/main/cljs/cljs/core.cljs#L10088-L10128。我不太清楚您为什么说这是一致的。

也就是说,是否可以在这两个平台上使用同样的代码来创建和使用 uuid?

CLJS UUID 不支持 Java UUID 的所有方法,但重要功能都存在(等价性、从字符串中构建、将字符串打印出来),这将大大提高处理 UUID 的可移植性。

0

评论由:bronsa 提出

clojure 和 clojurescript 都有 uuid 标记字面量,这应该足够用于互操作了。

0

评论由: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

但不到实际构造函数的1/100
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
...