`@static` 啥时候运行?

Posted

技术标签:

【中文标题】`@static` 啥时候运行?【英文标题】:When does `@static` run?`@static` 什么时候运行? 【发布时间】:2018-01-04 05:39:20 【问题描述】:

@static expr 是一种只运行一次expr 的方法; 有某种意义。 但是一次又是什么感觉呢?

是吗:

每次安装软件包一次? 每次加载包一次? 其他一些定义

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

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

【问题讨论】:

【参考方案1】:

它在解析时运行(从技术上讲,它在解析时间之后运行,当宏展开时)。如果在启用了预编译的包中使用(默认),那么它将在第一次加载时进行评估(即当您看到消息“INFO:预编译模块...”时)。

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

【讨论】:

以上是关于`@static` 啥时候运行?的主要内容,如果未能解决你的问题,请参考以下文章

C++中,啥时候 必须 用类名加作用域符调用函数? 有static修饰的成员函数被 对象调用会发生啥?

linux命令gcc–static式啥意思

java中啥时候该用static修饰方法?有啥好处或者坏处?

java static方法啥时候执行

c语言中static说明是啥意思?

求c语言中static的用法,啥时候定义要加上他啊?