使用函数作为参数还是直接在 clojure 中使用它们?

Dav*_*vid 1 functional-programming clojure

我有这两个功能,并且我在共享卡中使用共享卡到玩家。我是否应该将 share-card-to-player 作为参数传递或将其用作匿名函数?

顺便说一句,我正在使用它,我怀疑我是以函数方式使用它的,因为我基本上引用了一个全局变量,即 function share-card-to-player。这个假设正确吗?

(defn share-card-to-player [game [player cards]]
  (assoc-in game [:players player :cards ]
            cards))

(defn share-cards [{players :players cards :cards :as game}]
  (reduce share-card-to-player game
          (map vector
               (keys players)
               (->>  cards
                     (partition (/ (count cards)
                                   (count players)))))))
Run Code Online (Sandbox Code Playgroud)

ama*_*loy 5

我基本上引用了一个全局变量,即函数share-card-to-player

assoc-in是一个全局变量。/是一个全局变量。count是一个全局变量。你应该避开它们吗?做什么事情都会很难!全局变量的问题是突变,而函数是不可变的。

share-card-to-player如果需要,您可以定义为匿名本地函数。但这样就很好了。仅当您希望在另一个使用站点将另一个函数传递给它时,将其提取为函数参数才有意义。