Julia Lang:在导入时更改模块级全局值

时间:2014-11-30 03:02:18

标签: macros module julia

以下C代码的Julia等价物是什么:

#ifdef _USE_NATURAL
    const scalar c=1.0;
    const scalar e=0.302822;
#else
    const scalar c=2.99792458e10;
    const scalar e=4.80320425e-10;
#endif

我需要在模块级别定义ce。它们只是常量,但是我想让用户选择他们想要使用哪些常量(物理上对应于不同的单位集;这是一个物理模拟)。

由于预处理器的存在,这在C中很容易,但我似乎无法弄清楚如何在导入时更改模块的行为。有可能吗?

1 个答案:

答案 0 :(得分:1)

宏可以让你成为一部分

julia> macro use_natural(t)
           if eval(t) == 1
               return esc(quote
                              const c=1.0
                              const e=0.302822
                          end)
           else
               return esc(quote
                              const c=2.99793e10
                              const e=4.803e-10
                          end)
           end
       end

julia> userchoice = 0
0

julia> @eval @use_natural $userchoice
4.803e-10

julia> c, e
(2.99793e10,4.803e-10)

但是,听起来您希望在导入时定义userchoice并依赖于另一个模块中的全局命名空间...不确定是否可以完成。