像函数一样使用脚本文件

时间:2014-05-21 10:45:29

标签: clojure lua

在卢阿,我可以这样做:

a.lua:
return 1+2

b.lua:
print(dofile('a.lua'))

我的问题是:这种事情(使用像函数这样的文件)在计算机科学中是否有一个标准化的名称?除了lua之外还有哪些语言支持它?特别是,你能在Clojure做这样的事吗? (或Lisp)

2 个答案:

答案 0 :(得分:2)

(eval (read-string "(+ 1 2)"))
; 3

使用read代替read-string来读取文件。但要小心!这将执行文件中的任何代码。


请注意

readread-string评估他们找到的第一个表单。 load-file(如在@KobbyPemson's answer中)评估该批次,返回最后一个的结果,就像它们被一个不可见的do包围一样。

鉴于

(defn read-file [filename]
  (with-open [r (java.io.PushbackReader. (clojure.java.io/reader filename))]
             (eval (read r))))

(spit "testfile.txt" "(+ 1 2) 3 4")

然后

(eval (read-string "(+ 1 2) 3 4"))
; 3

(read-file "testfile.txt")
; 3

(load-file "testfile.txt")
; 4

(改编自ClojureDocs on read

答案 1 :(得分:2)

等效的clojure

a.clj:
(+ 1 2)

b.clj:
(load-file "a.clj")

但请注意,clojure命名空间是正确的方法。 在b.clj中,您可以:使用或:require /:从任何命名空间中引用select函数。

关于第二个问题,您可能需要查找linkers