我有一个模块,里面的代码怎样在Main模块中创建变量?
julia> module Foo
Core.eval(Main, :(x = 1))
end
Main.Foo
julia> using .Foo
julia> x
1
Thanks. Core和Main有什么区别?我尝试过Main.eval,失败了
既有Core.eval 也有Main.eval
好的,我能再追问一个问题么, 在 模块 中 eval (以及 @eval 宏) 和 include 函数的解释我还是不理解,可以再解释一下么?
help?> eval
search: eval evalfile @eval @evalpoly bytesavailable readavailable TypeVar
eval(expr)
Evaluate an expression in the global scope of the containing module. Every
Module (except those defined with baremodule) has its own 1-argument
definition of eval, which evaluates expressions in that module.
还有
help?> @eval
@eval [mod,] ex
Evaluate an expression with values interpolated into it using eval. If two
arguments are provided, the first is the module to evaluate in.
include
就和 C++ 的用法一样,相当于复制粘贴代码。
eval
是在运行时动态执行代码。
eval
是在其被包含的那个 module 里执行代码,想在其它 module 里执行代码,用 Core.eval(module_name, expr)
。
@eval
是个方便使用的宏,一个参数的时候默认调用 eval
, 两个的时候调用 Core.eval
。
1 个赞