【问题标题】:Is my ClojureScript translation of this JS function idiomatic?我对这个 JS 函数的 ClojureScript 翻译是惯用的吗?
【发布时间】:2016-01-06 06:29:11
【问题描述】:

我正在尝试评估我的 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")))))))

【问题讨论】:

  • 可能更适合代码审查网站 - 因为此代码按预期工作,对吧?
  • @cfrick “你可以忽略函数的实际内容”听起来它并不适合 Code Review。 Code Review 是关于做事情的工作代码,它与发生的事情相关。因此,这可能不适合该网站:/
  • 好吧,那么这是我的 2ct:我会使用 clojurescripts 自己的 filter,对于像 .endsWith 这样简单的东西,只需检查 #(.endsWith % ".dec")。 cljs 版本也忽略了err 的情况。并且至少在浏览器中println 的行为与console.log 不同。

标签: node.js clojure clojurescript


【解决方案1】:

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

我还赞成@cfrick 关于首选clojurescript 版本的filter 和任何其他此类函数调用的建议。我认为您对主机环境的直接依赖越少,您的代码就越便携。随着 clojure 1.7 中 reader conditionals 的引入,如今许多 clojure 项目正在发展,这无疑是一种趋势。

【讨论】:

  • 好的。你对我的代码缩进有什么想法吗?让我编写的 cljs 函数离页面右侧太远感觉很尴尬。在这方面,我正在做的事情有什么不符合习惯的吗?
  • 就样式指南(例如缩进)而言,我会看看github.com/bbatsov/clojure-style-guide。我认为它是事实上的标准 AFAIK。
猜你喜欢
  • 2021-02-03
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多