关于在编辑器中运行多个clj源文件的问题(已完结)

clojure
标签: #<Tag:0x00007f00151b4218>

#1

小弟断断续续学习clojure,累计学习时间不长,所以有些问题还是很纠结。比如如何在编辑器中运行多个clj源文件,先声明,这里我没有用lein或boot构建项目,只是按项目的目录结构建了一个项目文件夹和一些src,classes之类的文件夹。我问题的本质就是Clojure是否可以脚本化?
举个例子:像python这种解释型语言,在A脚本import B脚本后就能愉快的在A调用B的函数了。而c/c++麻烦些,但可以用什么makefile编译链接多个源文件。根据我的理解clojure-x.x.x.jar虽然是把clj源码编译成class字节码,但本质上就是个解释器,因为clj源码可以解释执行,比如不需要定义main方法也能执行(当然如果我要生成class文件,再用java命令执行class文件,那么还是要定义main方法吧),再比如编译好的class在内存直接被jvm加载,而不用在磁盘上持久化。当然这就引出了我的第二个问题:为什么在ns中使用:gen-class后没有在磁盘生成class文件?
根据资料,:compile-path默认的classpath是在形如“your-project-name/classes”的目录下,也试过“your-project-name/target/classes”这种目录结构,可我执行clj后并没有预期的class文件生成。最后上图:



不知道是我没有找到clojure脚本化的正确方法,还是根本不能脚本化。顺便说一句,不建任何目录,将这俩个clj文件扔桌面报错是一样的。
另外在repl编译ns还是错:


玩不转了啊,还请各位大佬多多帮助,小弟感激不尽。


#2

自己的问题自己顶,摸索了大半天,发现单独的非项目中的clj源文件确实不能将当前工作目录当作classpath,从而无法require相同目录下的clj。所以结论是clojure无法优雅的脚本化编程。但是用一些比较hack的方式可以实现脚本化编程,如下图:


感觉像在写JavaScript。。。:rofl::joy: