是否有在 Julia 程序中声明入口点的现成或惯用方式(即相当于main
C 中的或if __name__ == "__main__"
Python 中的构造)?
这似乎是一个重要的功能,以便编写不会在交互模式下使用的更大的结构化代码,但我找不到任何关于如何在 Julia 中完成的提示,如果有的话(可能的逃生路线可以编写一个任意函数来充当main
,然后在主模块末尾的顶层调用它一次,但这并不优雅,甚至可能效率不高)。TIA。
是否有在 Julia 程序中声明入口点的现成或惯用方式(即相当于main
C 中的或if __name__ == "__main__"
Python 中的构造)?
这似乎是一个重要的功能,以便编写不会在交互模式下使用的更大的结构化代码,但我找不到任何关于如何在 Julia 中完成的提示,如果有的话(可能的逃生路线可以编写一个任意函数来充当main
,然后在主模块末尾的顶层调用它一次,但这并不优雅,甚至可能效率不高)。TIA。
您可以编写一个main
函数,而不是从文件的顶层调用它。要从命令行运行程序,您将使用julia -L file.jl -e 'main(some,args)'
. 该-L
开关告诉 Julia 加载您的文件,然后-e
告诉它计算以下表达式。还有一个-E
评估和打印的开关(我认为它是“大声评估”,因为大写字母看起来“大声”)。
main
与 C或 Python相比,这有几个优点if __name__ == "__main__"
:
你不必有一个单一的入口点!您可以在加载文件后计算任何表达式,因此您不必将所有命令行功能塞进一个函数中。
您编写的调用使用完整的 Julia 语法,因此您通常可以避免解析参数。类似使用整数-e main(53)
53调用的东西,不需要inside 。main
atoi
main
当模块被加载时,如果它们有一个被调用的函数__init__
,它将被调用。这有帮助吗?
如果你想做if __name__ == "__main__":
python中的成语做的事情,我发现
if !isdefined(Base, :active_repl)
main()
end
成功了。
我经常发现自己希望能够将我的主文件加载到 REPL 中,并有选择地戳一些函数,而无需调用 main 或将 CLI 装订到主要用作库模块的模块上,所以我真的很喜欢这个技巧Python。