13

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

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

4

3 回答 3

13

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

main与 C或 Python相比,这有几个优点if __name__ == "__main__"

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

  2. 您编写的调用使用完整的 Julia 语法,因此您通常可以避免解析参数。类似使用整数-e main(53)53调用的东西,不需要inside 。mainatoimain

于 2014-07-24T13:38:51.687 回答
10

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

于 2014-07-24T20:43:15.823 回答
2

如果你想做if __name__ == "__main__":python中的成语做的事情,我发现

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

成功了。

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

于 2020-08-12T23:10:57.307 回答