macros - Julia ·朗 : Change value of module level global at import time

标签 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 中非常简单,但我似乎不知道如何更改导入时模块的行为。可能吗?

最佳答案

宏可以帮助您完成任务

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/

相关文章:

xml - 如何使用 Julia 处理 zip 文件

visual-studio-code - 如何在 VS Code 中创建 "terminal configuration macro"?轻松打开和拆分多个终端

c++ - 定义宏改进特定函数的语法

joomla - 如何将参数传递给从文章加载的 joomla 模块

julia - Julia 中如何计算数组的众数?

julia - 这个 Julia 直方图中缺少的逗号或 () 在哪里?

javascript - 有哪些学习如何实现方案宏的好资源?

methods - 是否可以编写将扩展为函数/方法签名的 Rust 宏?

javascript - 我可以在 javascript 中调用 t() 而不是 I18n.t() 吗?

module - ansible - 取消归档 - 找不到输入文件