Node.js 我对这个JS函数的ClojureScript翻译是惯用的吗?
我试图评估我的CLJS函数声明是否是惯用的。下面是我将JS函数转换为相应的CLJS函数的尝试。(您可以忽略函数的实际内容) JavaScript函数: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) {
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函数偏离页面太远,让人感觉很尴尬。在这方面,我正在做的任何事情都不是惯用的吗?在风格指南(例如缩进)方面,我会看一看。我认为这是事实上的标准。