ClojureScript - 在 map 中存储函数

标签 clojure clojurescript idioms

我使用映射来存储函数调用(在 ClojureScript 中,但在 Clojure 中应该是相同的):

(def parse-fn {:json    js/JSON.parse
               :edn     read-string
               :transit t->clj})

然后我有一个 transform 函数,如下所示:

(defn transform [format data]
  ((get parse-fn format) data))

像这样调用transform:(transform :transit data)效果很好。我只担心 transform 函数的可读性。第一个东西是函数并不是很明显。

编辑:我不能只调用(:transit parse-fn),因为format来自另一个函数,如:(another-fn [... format ...] ... (转换格式数据))

是否有显式的call函数,或者这段代码的结构不符合惯用语?

最佳答案

您的初始设计是完全可读的。将函数传递给执行实际工作的其他函数是一种相当正常的处理方式。我认为您不需要更改任何内容来“使其更具可读性”。如果我要更改任何内容以使我更清楚地拼写出来,请将转换的名称更改为transform-lookup或get-transform

(another-fn [... format ...] ... (transform-lookup format data))

(another-fn [... format ...] ... (get-transform format data))

虽然这是一个非常小的区别,但这样就很好了。

关于ClojureScript - 在 map 中存储函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32363746/

相关文章:

namespaces - 使用命名空间中未声明的 var,但 var 存在

clojure - 升级 ClojureScript 最简单的方法是什么?

python - 在 python 中检查值是否更大、更小或等于零的更好方法

c++ - Python -> C++ 习语 : Storing lambda expressions in a map/container

Clojure pmap 返回与 map 不同的结果

debugging - (pr raw-object) 中有哪些不同部分?

clojure - 跳过AOT的原因?

clojure - 如何找出 Clojure 代理进入无效状态的原因

java - Clojure:我可以使用什么正则表达式来检测多行字符串中一行的最后一个字符?

java - Java中的LBYL与EAFP?