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

ClojureScript 中 get-in 的实现使用默认情况的 reduce,这意味着在查找中找到 reduced 对象时,它会被 reduce 逻辑展开。如果这导致错误,则一个临时的解决方案是为 get-in 提供一个 not-found 值,这将使用与 Clojure 相同的逻辑。我认为向 CLJS 团队提出这个问题是一个合理的请求。


重新显示
很高兴,谢谢。
我认为可能还有其他上下文中reduce被用来处理数据。所以,也许不能指望`reduced`值通过函数调用"存活"?
...