以下 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
我需要在模块级别定义c
和e
。它们只是常量,但我想让用户可以选择他们想要使用的常量集(物理上对应于不同的单位集;这是物理模拟)。
由于预处理器的存在,这在 C 中非常简单,但我似乎不知道如何更改导入时模块的行为。可能吗?
最佳答案
宏可以帮助您完成任务
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
并取决于另一个模块中的全局命名空间...不确定是否可以实现。
关于macros - Julia ·朗 : Change value of module level global at import time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27209530/