我使用映射来存储函数调用(在 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/