请在 2024 Clojure 状态调查! 中分享您的想法。

欢迎!请查阅关于页面了解有关此功能的一些更多信息。

+2
Clojure
已关闭

ClojureScript 有 {{uuid}} 和 {{random-uuid}} 函数。在 ClojureScript 中拥有这些函数非常有用,我认为在 Clojure 中使用它们也会提高代码的可移植性。对此有任何兴趣的补丁吗?

关闭说明: Clojure 1.11.0-alpha3 添加了 `random-uuid` 和 `parse-uuid` 函数

8 个答案

+1 投票

评论者:

(链接: ~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

评论者:alexmiller

我认为这样做的最主要原因是为了提高可移植性。最合适的做法是生成 java.util.UUID,这和clojure中正在进行的一致吗?也就是说,在两个平台上创建和使用 uuids 的相同代码能工作吗?如果不能,那么这可能就没有很好的理由去这样做。

0

评论者:[email protected]

最合适的做法是生成 java.util.UUID,这和clojure中正在进行的一致吗?

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

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

但比直接的构造器少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
...