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