gpt4 book ai didi

clojure - Clojure 映射中的函数调用顺序是否保证运行时顺序处理?

转载 作者:行者123 更新时间:2023-12-04 12:31:07 24 4
gpt4 key购买 nike

我正在研究以下功能:

(defn process-request [request]
(if (not (db/empty?))
{:person (db/get-person!) :violations (:violations (process-violations request))}
{:person {} :violations ["no-person"]}))

我需要 process-violations 函数只在数据库不为空时被调用。这就是它位于 if block 中的原因。

但是,我还需要在 db/get-person! 函数 之前调用它。否则,该值将过时。

所以我想知道:

  • 我该怎么做?
  • 无论如何,映射中值的顺序是否足以保证一个函数总是在另一个函数之前被调用?

最佳答案

不, map 没有排序。对于小型文字 map ,它可能会起作用,但你不应该依赖它,而对于更大的 map ,它确实会失败:

user=> {0 (println 0) 1 (println 1) 2 (println 2) 3 (println 3) 4 (println 4) 5 (println 5) 6 (println 6) 7 (println 7) 8 (println 8) 9 (println 9)}
0
7
1
4
6
3
2
9
5
8
{0 nil, 7 nil, 1 nil, 4 nil, 6 nil, 3 nil, 2 nil, 9 nil, 5 nil, 8 nil}

但是通过使用 let 绑定(bind)总是很容易强制排序,这些绑定(bind)在 let 主体之前按顺序计算。

(let [person (db/get-person!)]
{:person person :violations ...})

关于clojure - Clojure 映射中的函数调用顺序是否保证运行时顺序处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69020254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com