什么时候`@ static`运行?

时间:2018-01-04 05:39:21

标签: julia precompile

@static expr是一种仅运行expr一次的方法; 对于某种感觉 但它有什么意义呢?

是吗:

    每次安装包装时
  • 一次?
  • 每次加载包裹一次?
  • 其他一些定义

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

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

1 个答案:

答案 0 :(得分:2)

它在解析时运行(从技术上讲,它在解析时之后运行,当宏被扩展时)。如果在启用了预编译的包中使用(默认值),则会在第一次加载时对其进行评估(即,当您看到消息" INFO:预编译模块...")时。

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