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

欢迎!请参阅 关于 页面了解更多关于这样工作的信息。

+3
ClojureScript
重置

我偶然遇到了这个问题

Clojure
(get {:x (reduced 10)} :x)
=> #object[clojure.lang.Reduced 0x28494b99 {:status :ready, :val 10}]

(get-in {:x (reduced 10)} [:x])
=> #object[clojure.lang.Reduced 0x28494b99 {:status :ready, :val 10}]

ClojureScript
(get {:x (reduced 10)} :x)
=> #object[cljs.core.Reduced] ; 与 Clojure 同样的行为
(get-in {:x (reduced 10)} [:x])
=> 10

所以 get-in 在 ClojureScript 中似乎会自动 deref reduced 值吗?

1 答案

0

CLJS 中 get-in 的实现使用 reduce 作为默认情况,这意味着当在查找中找到 reduced 对象时,它将被 reduce 逻辑解开。如果这引起错误,则可以将一个临时的解决方案提供给 get-in,该方案将使用与 Clojure 相同的逻辑。我认为向 CLJS 团队提出这个问题是合理的。

by
重新发布 by
太好了,谢谢。
by
我想可能还有其他上下文中使用reduce来处理数据。所以,可能不能保证`reduced`值会“生存”通过函数调用?
...