Julia: 将参数传递给`include("file.jl")`

4

我想知道是否可以向include("file.jl")传递参数。例如,我们可以在file.jl中解析ARGS并将它们用于其中。类似于在命令行中通过传递参数所做的操作。


1
我可以问一下你想要实现什么吗? - Alexander Morley
想象一下,在一个模块中,我使用 include("....") 运行多个文件,并且其中一些需要我想要传递的一些参数。例如,理想情况下,语义上意味着 include("file1.jl", arg1, arg2),并且 file1.jl 使用这些 arg1arg2。例如,想象一下这些参数的值是在调用 include() 的模块内部创建的。 - A.Yazdiha
换句话说,除了使用命令行参数传递之外,是否有其他方法将参数传递给另一个文件/模块中的文件? - A.Yazdiha
2个回答

4
重新分配ARGS,让file.jl认为它收到了参数是可以的,但会导致警告(因为它覆盖了Base.ARGS)。更好的方法可能是在使用file.jl中的ARGS之前,使用isdefined检查不同参数源。
例如,文件main.jl如下:
newARGS = String["adios","amigos"]
include("file.jl")

file.jl 将是:

localARGS = isdefined(:newARGS) ? newARGS : ARGS
@show localARGS

现在:

$ julia file.jl hello world
localARGS = String["hello","world"]

$ julia main.jl 
localARGS = String["adios","amigos"]

这也允许通过多层嵌套深入交流。

有没有一种方法不保留变量名?以防将来有人想要include("file.jl"),但可能已经分配了变量localARGS,例如在包含其他文件时? - Jake Stevens-Haas

0

将代码包含进来与将该代码段复制到“包含者”代码中具有相同的效果。如果所包含的代码根据多个“参数”而有不同的运行方式,则这很可能是您必须使用函数或模块封装该代码的强烈提示。此外,在Julia中,“原始”代码 tend to be faster inside functions Performance Tips


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接