`@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)
(但是你会有更长的加载时间)。
@static expr
是一种只运行expr
一次的方法;
为了某种意义上的曾经。
但曾经是什么意思?
是吗:
- 每次安装包一次?
- 每次加载包一次?
- 一些其他定义
最常见的用途是 OS 检查:例如
ccall((@static Sys.iswindows() ? :_fopen : :fopen), ...)
我想知道我是否可以使用它根据环境变量生成不同的代码:特别是 JULIA_NUM_THREADS
。
这个环境变量可以在 运行s of julia 之间改变,
但如果它在会话期间发生变化,则不会有任何反应。
它在解析时是 运行(技术上它是 运行 就在解析时间之后,当宏被展开时)。如果在启用预编译(默认)的包中使用,那么它将在第一次加载时被评估(即当您看到消息 "INFO: Precompiling module ...")。
所以不,你不能用它来根据环境变量生成不同的代码,除非你在模块外明确使用__precompile__(false)
(但是你会有更长的加载时间)。