Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/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
Clojurescript第一步疑问和问题_Clojure_Stdin_Clojurescript_Clojure.spec_Nrepl - Fatal编程技术网

Clojurescript第一步疑问和问题

Clojurescript第一步疑问和问题,clojure,stdin,clojurescript,clojure.spec,nrepl,Clojure,Stdin,Clojurescript,Clojure.spec,Nrepl,我刚开始使用clojurescript,我有很多疑问,我想做的是使用clojurescript只解决基本问题,现在与web无关 如果我去掉web开发部分,Clojure和ClojureScript中的编码会有什么区别吗?还是完全一样 我还想知道是否可以使用命令cat DATA.lst|clj program.cljs来运行clojurescript代码?或者编译器是不同的?如果是这样,我如何编译clojurescript代码 关于官方页面,它提供了一个非常有限的hello world!,页面将以

我刚开始使用clojurescript,我有很多疑问,我想做的是使用clojurescript只解决基本问题,现在与web无关

如果我去掉web开发部分,Clojure和ClojureScript中的编码会有什么区别吗?还是完全一样

我还想知道是否可以使用命令cat DATA.lst|clj program.cljs来运行clojurescript代码?或者编译器是不同的?如果是这样,我如何编译clojurescript代码

关于官方页面,它提供了一个非常有限的hello world!,页面将以下行作为编译clojurescript的命令传递

clj--main cljs.main--compile hello-world.core--repl

  • 如果我使用--repl命令,它只会打印一些东西,如果我删除了这个命令,控制台就会停止打印结果,问题是,它打印的东西非常不同,另一方面,它使用clojurecat DATA.lst|clj program.cljs的命令编译代码

  • 它是完全面向网络的,所以它一直在我的浏览器中打开,并显示与该主题相关的内容,这与我的案例无关

  • 我想知道如何执行我的代码,以确保我是为clojurescript编译的,而不是为clojure编译的(以防它们不同)

  • 有必要创建一个复杂的项目树来公开页面,或者我可以用一种简单的方式将其保留在文件夹中。(这就是我与clojure合作的方式)

  • 我试图编译的代码如下,很简单,我只需阅读stdin并按照我希望的方式处理最后的信息

  • 当我使用提供官方clojure脚本页面的代码行时,vscode在终端中提供的内容如下:

    WARNING: When invoking clojure.main, use -
    ClojureScript 1.10.758
    cljs.user=> 33
    cljs.user=> 50
    57
    54
    69
    cljs.user=> 72
    80
    68
    56
    63
    cljs.user=> 47
    71
    40
    56
    59
    52
    cljs.user=> 74
    59
    78
    66
    cljs.user=> 74
    62
    94
    82
    77
    cljs.user=> 50
    66
    57
    54
    cljs.user=> 68
    72
    63
    44
    56
    cljs.user=> 60
    48
    79
    75
    63
    cljs.user=> 67
    51
    58
    cljs.user=> 66
    78
    51
    60
    54
    cljs.user=> 56
    52
    49
    25
    61
    cljs.user=> 36
    53
    45
    48
    cljs.user=> 58
    61
    42
    49
    54
    cljs.user=> 76
    80
    68
    68
    60
    cljs.user=> 63
    58
    54
    51
    58
    cljs.user=> 42
    50
    54
    54
    58
    cljs.user=> 50
    59
    54
    62
    66
    54
    cljs.user=> 65
    41
    61
    49
    56
    cljs.user=> 27
    48
    43
    55
    cljs.user=> 35
    43
    35
    47
    28
    cljs.user=> 49
    44
    52
    32
    44
    cljs.user=> 74
    58
    65
    70
    53
    cljs.user=> 52
    56
    40
    60
    52
    cljs.user=> 54
    69
    69
    62
    cljs.user=> 52
    49
    56
    76
    cljs.user=> 58
    66
    50
    70
    50
    cljs.user=> 82
    70
    73
    77
    70
    cljs.user=> 56
    51
    63
    35
    cljs.user=> 59
    67
    52
    71
    79
    cljs.user=> 72
    72
    76
    84
    57
    cljs.user=> 66
    61
    58
    61
    cljs.user=> 49
    32
    52
    32
    cljs.user=> 64
    33
    52
    64
    49
    
    ((2 9 6 9) (0 8 8 8 3) (11 11 4 8 11 4) (2 11 6 6) (2 2 10 10 5) (2 6 9 6) (8 0 3 8 8) (0 0 7 3 3) (7 3 10) (6 6 3 0 6) (8 4 1 1 1) (0 5 9 0) (10 1 6 1 6) (4 8 8 8 0) (3 10 6 3 10) (6 2 6 6 10) (2 11 6 2 6 6) (5 5 1 1 8) (3 0 7 7) (11 7 11 11 4) (1 8 4 8 8) (2 10 5 10 5) (4 8 4 0 4) (6 9 9 2) (4 1 8 4) (10 6 2 10 2) (10 10 1 5 10) (8 3 3 11) (11 7 4 11 7) (0 0 4 0 9) (6 1 10 1) (1 8 4 8) (4 9 4 4 1))
    
    这与我在stdin中输入的信息完全相同,也就是说,它没有做我的代码所规定的事情,它应该提供以下内容:

    WARNING: When invoking clojure.main, use -
    ClojureScript 1.10.758
    cljs.user=> 33
    cljs.user=> 50
    57
    54
    69
    cljs.user=> 72
    80
    68
    56
    63
    cljs.user=> 47
    71
    40
    56
    59
    52
    cljs.user=> 74
    59
    78
    66
    cljs.user=> 74
    62
    94
    82
    77
    cljs.user=> 50
    66
    57
    54
    cljs.user=> 68
    72
    63
    44
    56
    cljs.user=> 60
    48
    79
    75
    63
    cljs.user=> 67
    51
    58
    cljs.user=> 66
    78
    51
    60
    54
    cljs.user=> 56
    52
    49
    25
    61
    cljs.user=> 36
    53
    45
    48
    cljs.user=> 58
    61
    42
    49
    54
    cljs.user=> 76
    80
    68
    68
    60
    cljs.user=> 63
    58
    54
    51
    58
    cljs.user=> 42
    50
    54
    54
    58
    cljs.user=> 50
    59
    54
    62
    66
    54
    cljs.user=> 65
    41
    61
    49
    56
    cljs.user=> 27
    48
    43
    55
    cljs.user=> 35
    43
    35
    47
    28
    cljs.user=> 49
    44
    52
    32
    44
    cljs.user=> 74
    58
    65
    70
    53
    cljs.user=> 52
    56
    40
    60
    52
    cljs.user=> 54
    69
    69
    62
    cljs.user=> 52
    49
    56
    76
    cljs.user=> 58
    66
    50
    70
    50
    cljs.user=> 82
    70
    73
    77
    70
    cljs.user=> 56
    51
    63
    35
    cljs.user=> 59
    67
    52
    71
    79
    cljs.user=> 72
    72
    76
    84
    57
    cljs.user=> 66
    61
    58
    61
    cljs.user=> 49
    32
    52
    32
    cljs.user=> 64
    33
    52
    64
    49
    
    ((2 9 6 9) (0 8 8 8 3) (11 11 4 8 11 4) (2 11 6 6) (2 2 10 10 5) (2 6 9 6) (8 0 3 8 8) (0 0 7 3 3) (7 3 10) (6 6 3 0 6) (8 4 1 1 1) (0 5 9 0) (10 1 6 1 6) (4 8 8 8 0) (3 10 6 3 10) (6 2 6 6 10) (2 11 6 2 6 6) (5 5 1 1 8) (3 0 7 7) (11 7 11 11 4) (1 8 4 8 8) (2 10 5 10 5) (4 8 4 0 4) (6 9 9 2) (4 1 8 4) (10 6 2 10 2) (10 10 1 5 10) (8 3 3 11) (11 7 4 11 7) (0 0 4 0 9) (6 1 10 1) (1 8 4 8) (4 9 4 4 1))
    

    Clojure是一种在Java虚拟机上运行的语言。ClojureScript在外观和功能上都是类似的语言,但它被编译为JavaScript,并将在JavaScript运行时(如网络浏览器中的NodeJS或JS引擎)上运行。由于它们针对不同的运行时,因此存在差异,如下所述:

    ClojureScript中没有像
    readline
    这样的函数,您需要使用JS interop编写自己的函数,创建自己的事件处理程序。您可以使用core.async库之类的工具为阻塞和等待输入的节点编写代码,但这远远超出了初学者的水平

    您的代码实际上看起来可以在Clojure中工作,因此,除非您有理由坚持使用Node并避免使用JVM,否则我将坚持使用普通Clojure,以利用所有可用资源学习该语言

    下面是一个简单的示例项目和程序,它对从标准输入中输入的数字求和:

    该项目的结构如下:

    .
    ├── data.txt
    └── src
        └── demo
            └── core.clj
    
    主要节目:

    (ns demo.core)
    (定义-主参数[&args]
    (循环[total 0];;将总和初始化为0
    (如果让[line(read line)];;将任何输入保留为'line',否则分支
    (让[n(读字符串行)];;将'line'解析为数字
    (重复(+n总计));;循环“更新”总计
    (印刷总数);;else分支:无输入,打印到目前为止的总数
    
    数据文件
    data.txt

    11
    22
    33
    
    。。。最后是一个运行示例:

     cat data.txt | clj -m demo.core
    WARNING: When invoking clojure.main, use -M
    66
    

    听起来你真的想在这个项目中使用普通的Clojure而不是ClojureScript

    除了上面的好答案外,您可能还对以下两个模板项目感兴趣,这两个项目可以帮助您入门:

    • Clojure模板项目:
    • ClojureScript模板项目:

    更新 您希望在CLJS中解决的“基本问题”是什么?您可以添加更多细节吗

    ClojureScript作为一种语言几乎可以做Clojure所能做的任何事情。最大的区别在于将JVM与浏览器中运行的JavaScript进行比较:

    • JVM可以处理上千个线程。JS只有1个线程(尽管可以使用clojure/core.async和/或回调来伪造多个线程)

    • CLJ具有真正的动态变量(即Clojure
      var
      )。CLJS变量在运行时是静态的

    • JVM上的I/O是无限制的。浏览器和JS不用于磁盘I/O,仅限于网络I/O

    • 有关差异的详细列表,请参见


    如果是我,我会从普通的老clojure开始,这里:谢谢!我想有了这些,我现在明白我必须做什么了汉克斯,我知道使用clojure是更好的选择,但有几个原因我不能使用clojure。我的最后一个问题是,有一种方法可以知道我可以在clojure中制作哪些我不能在clojurescript中制作的东西?