@static expr是一种只运行expr一次的方法; 对于某种感觉.
但它有什么意义呢?
是吗:
最常见的用途是用于OS检查:例如
ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)
我想知道我是否可以使用它来生成基于环境变量的不同代码:特别是JULIA_NUM_THREADS.这个环境变量可以在julia的运行之间改变,但如果它在会话期间发生变化,则不会对它做出任何反应.
它在解析时运行(从技术上讲,它在解析时间之后运行,此时宏被扩展)。如果在启用预编译的包中使用(默认),那么它将在第一次加载时进行评估(即当您看到消息“INFO:预编译模块...”时)。
所以不,你不能使用它根据环境变量生成不同的代码,除非你明确地__precompile__(false)在模块外部使用(但是这样你将有更长的加载时间)。