Clojurescript第一步疑问和问题
我刚开始使用clojurescript,我有很多疑问,我想做的是使用clojurescript只解决基本问题,现在与web无关 如果我去掉web开发部分,Clojure和ClojureScript中的编码会有什么区别吗?还是完全一样 我还想知道是否可以使用命令cat DATA.lst|clj program.cljs来运行clojurescript代码?或者编译器是不同的?如果是这样,我如何编译clojurescript代码 关于官方页面,它提供了一个非常有限的hello world!,页面将以下行作为编译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!,页面将以
clj--main cljs.main--compile hello-world.core--repl
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
)。CLJS变量在运行时是静态的var
- JVM上的I/O是无限制的。浏览器和JS不用于磁盘I/O,仅限于网络I/O
- 有关差异的详细列表,请参见