`@static` 运行 什么时候出现?

When does `@static` run?

@static expr是一种只运行expr一次的方法; 为了某种意义上的曾经。
但曾经是什么意思?

是吗:

最常见的用途是 OS 检查:例如 ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)

我想知道我是否可以使用它根据环境变量生成不同的代码:特别是 JULIA_NUM_THREADS。 这个环境变量可以在 运行s of julia 之间改变, 但如果它在会话期间发生变化,则不会有任何反应。

它在解析时是 运行(技术上它是 运行 就在解析时间之后,当宏被展开时)。如果在启用预编译(默认)的包中使用,那么它将在第一次加载时被评估(即当您看到消息 "INFO: Precompiling module ...")。

所以不,你不能用它来根据环境变量生成不同的代码,除非你在模块外明确使用__precompile__(false)(但是你会有更长的加载时间)。