Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
Clojurescript宏:在编译时使用节点api_Clojure_Clojurescript - Fatal编程技术网

Clojurescript宏:在编译时使用节点api

Clojurescript宏:在编译时使用节点api,clojure,clojurescript,Clojure,Clojurescript,我正在用lumo编写一个cli脚本,我想要以下宏,但是使用nodejs中的readFileSync (defmacro compile-time-slurp [path] ;; slurp is not defined in self hosted cljs (slurp path)) 这可能吗 编辑:更清楚地说,这是在自托管clojurescript中,在宏扩展时,slurp功能不可用。clojurescript宏是用Clojure语言编写的,其生命周期大致如下: jvm加载Cloj

我正在用lumo编写一个cli脚本,我想要以下宏,但是使用nodejs中的
readFileSync

(defmacro compile-time-slurp [path]
  ;; slurp is not defined in self hosted cljs
  (slurp path))
这可能吗


编辑:更清楚地说,这是在自托管clojurescript中,在宏扩展时,
slurp
功能不可用。

clojurescript宏是用Clojure语言编写的,其生命周期大致如下:

  • jvm加载Clojure运行时、准备就绪以及其他一些东西
  • 宏被编译
  • 宏运行并生成新的ClojureScript表达式
  • 如果该表达式再次是宏循环
  • 这将省略ClojureScript编译器其余部分(大部分)中完成的所有部分因此,我们可以关注这样一个事实,即ClojureScript宏在运行时只能访问JVM中可用的Clojure部分,而不能访问node。该宏返回的表单将成为完成的ClojureScript程序的一部分,它可以访问node API,如readFileSync


    简而言之,宏应该返回对readFileSync的调用,而不是在宏运行时读取文件。如果您的代码在计算宏时确实需要读取某些文件,例如它们包含要输出的代码或其他内容,然后你需要使用Clojure表单来阅读那些文件,比如上面对
    slurp
    的调用。

    再次感谢amalloy修复了我的speelng和Gramarrr:-)也许问题中没有那么清楚,但我使用的是lumo,它是自托管的。在自托管中,
    slurp
    函数在编译时不起作用。不清楚如何使用这些约束来实现这一点,抱歉:-/我希望有一些方法可以避免在这里使用宏并回避此问题。这些事情通常是由于“宏观传染”而发生的,可能是一种痛苦。