首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >include到底做了什么?

include到底做了什么?
EN

Stack Overflow用户
提问于 2016-12-23 01:20:59
回答 2查看 2.3K关注 0票数 4

据我所知,从文档和网络上的几个帖子来看,声明

代码语言:javascript
复制
include("myfile.jl")

只需获取myfile.jl中的代码并将其粘贴到调用文件(或控制台中),用include语句替换该行。

如果我错了,请纠正我。我只是从朱莉娅开始。然而,我也看到了Julia的创建者之一的以下评论:

代码语言:javascript
复制
"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有什么区别?

EN

回答 2

Stack Overflow用户

发布于 2016-12-23 01:32:41

这不是一个函数调用,因为如果myfile.jl只是a = 2,而你做的是include("myfile.jl"),那么你可以在REPL中签入那个a = 2。在函数中,a将在不同的作用域中定义,然后在函数结束后擦除。因此,这是行为上的明显区别。下面是一个示例REPL会话,演示了其中的区别:

代码语言:javascript
复制
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的局部变量,只能查看全局变量。

票数 7
EN

Stack Overflow用户

发布于 2016-12-23 01:26:05

这意味着当您的应用程序启动时,您将立即拥有此代码,而不是include。"Include“不会出现在正在运行的应用程序中。这意味着如果您使用include (这并不明显,为了更好地理解它),您的应用程序在加载时可能会稍微慢一点,但它将使用include替换为代码。加载时间是在应用程序开始运行之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41288626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档