在Julia中声明主要功能/入口点

时间:2014-07-24 01:30:56

标签: function julia code-structure

是否有现成或惯用的方式在Julia程序中声明一个入口点(即相当于C中的main或Python中的if __name__ == "__main__"构造)?

这似乎是一个重要的功能,以便编写不会在交互模式中使用的更大的结构化代码,但我找不到任何关于如何在Julia中完成此任务的提示(如果有的话)可能的转义路径可能是写一个任意函数作为main,然后在主模块末尾的顶层调用它一次,但这不优雅,甚至可能效率不高。 TIA。

3 个答案:

答案 0 :(得分:8)

你可以写一个main函数而从文件的顶层调用它。要从命令行运行程序,您将使用julia -L file.jl -e 'main(some,args)'-L开关告诉Julia加载您的文件,然后-e告诉它评估以下表达式。还有一个-E开关用于评估和打印(我认为它是"大声评估",因为大写字母似乎"响亮")。

这比C main或Python if __name__ == "__main__"有一些优势:

  1. 您不必拥有一个入口点!加载文件后,您可以评估任何表达式,因此您不必将所有命令行功能都塞进一个函数中。

  2. 您编写的调用使用完整的Julia语法,因此通常可以避免解析参数。像-e main(53)这样的内容使用整数 53调用mainatoi内不需要main

答案 1 :(得分:7)

加载模块时,如果它们有一个名为__init__的函数,它将被调用。这有帮助吗?

答案 2 :(得分:1)

如果您想做python中的if __name__ == "__main__":习惯用法,我发现了

if !isdefined(Base, :active_repl)
    main()
end

起到了作用。

我经常发现自己希望能够将主文件加载到REPL中并有选择地戳一些功能,而无需调用main或将CLI装订到主要用作库模块的模块上,所以我真的很喜欢来自python的技巧。