据我所知,从文档和网络上的几个帖子来看,声明
include("myfile.jl")只需获取myfile.jl中的代码并将其粘贴到调用文件(或控制台中),用include语句替换该行。
如果我错了,请纠正我。我只是从朱莉娅开始。然而,我也看到了Julia的创建者之一的以下评论:
"include works in the dynamically-current module, not the lexically-current one.
It is really a load-time function, not a run-time one."dynamically current和lexically current有什么区别?
发布于 2016-12-23 01:32:41
这不是一个函数调用,因为如果myfile.jl只是a = 2,而你做的是include("myfile.jl"),那么你可以在REPL中签入那个a = 2。在函数中,a将在不同的作用域中定义,然后在函数结束后擦除。因此,这是行为上的明显区别。下面是一个示例REPL会话,演示了其中的区别:
julia> a
ERROR: UndefVarError: a not defined
julia> function incl(file)
a = "not 2"
include(file)
@show Main.a
@show a
end
incl (generic function with 1 method)
julia> incl("myfile.jl")
Main.a = 2
a = "not 2"
"not 2"
julia> a
2这就是他们所说的“动态当前”vs“词汇当前”的意思。在词法上,一个函数在它自己的作用域中运行,这个作用域只能从函数的实际代码中访问-没有其他方法来访问或更改局部变量。即使从函数内部调用,include也始终在当前全局范围内运行。Julia的eval函数的行为与此类似,- you不能查看或更改eval的局部变量,只能查看全局变量。
发布于 2016-12-23 01:26:05
这意味着当您的应用程序启动时,您将立即拥有此代码,而不是include。"Include“不会出现在正在运行的应用程序中。这意味着如果您使用include (这并不明显,为了更好地理解它),您的应用程序在加载时可能会稍微慢一点,但它将使用include替换为代码。加载时间是在应用程序开始运行之前。
https://stackoverflow.com/questions/41288626
复制相似问题