Julia编程:函数、宏、模块化与测试
1. 函数与宏的抉择
在Julia编程中,我们常常会面临一个问题:是使用函数还是宏?这就如同莎士比亚所说的“to macrotize or not to macrotize”。对于刚开始开发宏的人来说,这可能会让人感到不知所措。其实,很多时候我们可以使用常规函数来实现想要的功能,而不必依赖宏。
宏大致可以分为两类:
- 第一类 :是对一些相对简单的样板代码的包装,目的是避免重复编写代码。例如,显示宏 @assert
、 @print
、 @show
等,以及计时宏 @time
、 @benchmark
、 @btime
等。其中, @benchmark
和 @btime
属于 BenchmarkTools.jl
模块,该模块的实现虽然涉及一些辅助函数,但代码很容易理解。
- 第二类 :一些较新的Julia包是由元编程专家使用宏大量创建的。比如Flux、JuMP、Zygote和Turing等包,宏在实现特定领域语言时非常有用。由于Julia包是开源的,当使用包含复杂宏的包时,查看源代码是个不错的选择。此外,YouTube等平台上有很多相关的视频演示,例如David Sanders在JuliaCon 2021上的系列Jupyter笔记本,参考链接为https://github.com/dpsanders/