Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/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
Clojure 像函数一样使用脚本文件_Clojure_Lua - Fatal编程技术网

Clojure 像函数一样使用脚本文件

Clojure 像函数一样使用脚本文件,clojure,lua,Clojure,Lua,在lua中,我可以这样做: a.lua: return 1+2 b.lua: print(dofile('a.lua')) 我的问题是:这种东西(使用像函数这样的文件)在计算机科学中有一个标准化的名字吗?除了lua,还有哪些语言支持它?特别是,你能在Clojure做这样的事情吗?(或Lisp) 使用而不是从文件中读取。但要当心!这将执行文件中的任何代码 注 read和read string评估他们找到的第一个表单加载文件(如中)评估批次,返回最后一个批次的结果,就像它们被不可见的do包围一

在lua中,我可以这样做:

a.lua:
return 1+2

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

使用而不是从文件中读取。但要当心!这将执行文件中的任何代码


read
read string
评估他们找到的第一个表单<代码>加载文件(如中)评估批次,返回最后一个批次的结果,就像它们被不可见的
do
包围一样

给定

然后

(改编自)

使用而不是从文件中读取。但要当心!这将执行文件中的任何代码


read
read string
评估他们找到的第一个表单<代码>加载文件(如中)评估批次,返回最后一个批次的结果,就像它们被不可见的
do
包围一样

给定

然后


(改编自)

clojure的等价物是

a.clj:
(+ 1 2)

b.clj:
(load-file "a.clj")
但请注意,clojure名称空间将是正确的方法。 在b.clj中,您可以:use或:require/:refere从任何名称空间中选择函数


对于第二个问题,您可能需要查找。

clojure的等价物是

a.clj:
(+ 1 2)

b.clj:
(load-file "a.clj")
但请注意,clojure名称空间将是正确的方法。 在b.clj中,您可以:use或:require/:refere从任何名称空间中选择函数


对于第二个问题,您可能需要查找。

在大多数语言中,源文件对应的不是单个函数,而是包/模块/命名空间,其中可以包含许多内容,其中一些可能是函数。您确定要将文件作为单个无参数函数求值吗?@Thumbnail这就是它在Lua中的工作方式;文件只是vararg(不是无参数)函数。这实际上非常好,因为现在你可以用一个“文件”做任何你可以用一个普通函数做的事情(多次调用它,设置一个调试钩子或函数环境,等等)。如果需要包/模块/名称空间,可以返回一个表。@ColonelThirtyTwo,用“
dofile
打开命名文件并将其内容作为Lua块执行。示例中的文件由一个返回语句组成,这是一种块:在任何地方都没有提到函数定义或调用,尽管我猜这两种语句都可能出现在块文件中。这看起来很像Lisp,不管是什么方言。@Thumbnail
dofile
是打开和读取文件、编译Lua代码并执行它的快捷方式
loadstring
具有我所述的行为。@ColonelThirtyTwo Lua的
loadstring
是辅助库(C接口)的一部分,在C字符串(不是文件)上操作,不在示例中。我认为您正在寻找的是
lua_load
,它是C API的一部分,在(文件)读取器上工作,与Clojure的
read
的工作原理基本相同。在大多数语言中,源文件对应的不是单个函数,而是包/模块/命名空间,其中可以包含许多东西,其中一些可能是函数。您确定要将文件作为单个无参数函数求值吗?@Thumbnail这就是它在Lua中的工作方式;文件只是vararg(不是无参数)函数。这实际上非常好,因为现在你可以用一个“文件”做任何你可以用一个普通函数做的事情(多次调用它,设置一个调试钩子或函数环境,等等)。如果需要包/模块/名称空间,可以返回一个表。@ColonelThirtyTwo,用“
dofile
打开命名文件并将其内容作为Lua块执行。示例中的文件由一个返回语句组成,这是一种块:在任何地方都没有提到函数定义或调用,尽管我猜这两种语句都可能出现在块文件中。这看起来很像Lisp,不管是什么方言。@Thumbnail
dofile
是打开和读取文件、编译Lua代码并执行它的快捷方式
loadstring
具有我所述的行为。@ColonelThirtyTwo Lua的
loadstring
是辅助库(C接口)的一部分,在C字符串(不是文件)上操作,不在示例中。我认为您正在寻找的是
lua_load
,它是C API的一部分,在(文件)读取器上工作,与Clojure的
read
的工作原理基本相同。
(eval (read-string "(+ 1 2) 3 4"))
; 3

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

(load-file "testfile.txt")
; 4
a.clj:
(+ 1 2)

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