如何确定julia脚本是作为模块包含还是作为脚本运行?

set*_*ler 5 julia

我想知道如何用Julia语言确定a file.jl是否作为脚本运行,例如在调用中:

bash$ julia file.jl
Run Code Online (Sandbox Code Playgroud)

例如,它仅在这种情况下必须启动一个函数main。因此,我可以使用include('file.jl'),而无需实际执行功能。

具体来说,我正在寻找一个已经在python问题中回答的类似问题

def main():
    # does something

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

编辑:更具体地说,当在非交互式(例如脚本)环境中使用时,该方法Base.isinteractive(请参见此处)不能解决问题include('file.jl')

Bog*_*ski 4

全局常量PROGRAM_FILE包含从命令行传递给 Julia 的脚本名称(include调用时不会更改)。

另一方面@__FILE__宏为您提供它所在的文件的名称。

例如,如果您有一个文件:

a.jl

println(PROGRAM_FILE)
println(@__FILE__)
include("b.jl")
Run Code Online (Sandbox Code Playgroud)

b.jl

println(PROGRAM_FILE)
println(@__FILE__)
Run Code Online (Sandbox Code Playgroud)

你有以下行为:

$ julia a.jl
a.jl
D:\a.jl
a.jl
D:\b.jl

$ julia b.jl
b.jl
D:\b.jl
Run Code Online (Sandbox Code Playgroud)

总之:

  • PROGRAM_FILE告诉您 Julia 启动时使用的文件名是什么;
  • @__FILE__告诉您实际在哪个文件中调用了宏。

  • 一般来说是的。但是,如果不同目录中有两个同名文件,则可能会出现问题。 (2认同)