Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我对这个JS函数的ClojureScript翻译是惯用的吗?_Node.js_Clojure_Clojurescript - Fatal编程技术网

Node.js 我对这个JS函数的ClojureScript翻译是惯用的吗?

Node.js 我对这个JS函数的ClojureScript翻译是惯用的吗?,node.js,clojure,clojurescript,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) {

我试图评估我的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);
    });
}
(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")))))))
我翻译成ClojureScript:

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);
    });
}
(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")))))))

我觉得很好。正如@cfrick在评论中指出的,您可以在某些方面使代码更加简洁(例如,使用匿名函数,这是一种习惯用法,因为它只需一次使用,而且相对简单)。一旦开始有多个参数,为了可读性起见,我认为使用内联函数声明就更有意义了


我也会支持@cfrick关于更喜欢clojurescript版本的
filter
和任何其他此类函数调用的建议。我认为您对主机环境的直接依赖越少,代码的可移植性就越强。随着clojure 1.7中的引入,许多clojure项目现在都在发展这一趋势。

可能更适合代码审查网站-因为此代码按预期工作,对吧?@cfrick“您可以忽略函数的实际内容”听起来似乎不适合代码审查。都是关于工作代码的事情,在那里它是相关的发生了什么。因此,这可能不太适合该站点:/嗯,下面是我的2ct:我会使用clojurescripts自己的
过滤器
,对于一些简单的东西,比如.endsWith check只是
(.endsWith%.”.dec”)
。cljs版本也会忽略
err
案例。至少在浏览器中,
println
的行为不同于
console.log
。Ok。你对我的代码缩进有什么想法吗?让我编写的cljs函数偏离页面太远,让人感觉很尴尬。在这方面,我正在做的任何事情都不是惯用的吗?在风格指南(例如缩进)方面,我会看一看。我认为这是事实上的标准。