以下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中很容易,但我似乎无法弄清楚如何在导入时更改模块的行为。有可能吗?
答案 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
并依赖于另一个模块中的全局命名空间...不确定是否可以完成。