我的ClojureScript翻译这个JS函数是惯用的吗?

时间:2016-01-06 06:29:12

标签: node.js clojure clojurescript

我正在尝试评估我的CLJS函数声明是否是惯用的。这是我尝试将JS函数转换为相应的CLJS函数。 (您可以忽略该函数的实际内容。)

JavaScript功能:

var dir = require('node-dir');

function jsFunc(path) {
    dir.files(path, function(err, files) {
        if (err) throw err;
        files = files.filter(function (file) {
           return file.endsWith('.dec');
        });

        console.log(files);
    });
}

我对ClojureScript的翻译:

(defn cljs-func [input-path]
  (let [dir (node/require "node-dir")]
    (.files dir input-path (fn [err files] 
                               (println (.filter files (fn [file] (.endsWith file ".dec")))))))

1 个答案:

答案 0 :(得分:1)

对我来说似乎很好。正如@cfrick在评论中指出的那样,你可以在某些方面使代码更加简洁(例如使用匿名函数,这是惯用的,一次性使用且相对简单)。一旦你开始有多个参数,我认为为了可读性而有一个内联函数声明开始更有意义。

我还会首先考虑@cfrick关于更喜欢clojurescript的arr.sort(function(a,b){ return Math.abs(78 - a.dezibel) - Math.abs(78 - b.dezibel); }); 版本以及此类任何其他函数调用的建议。我认为您直接依赖主机环境越少,代码就变得越便携。当然,在clojure 1.7中引入reader conditionals,这些日子里许多clojure项目正在发展。

相关问题