如何命名一个宏,使其在Elixir中看起来像一个常量?

 Gemini_2 发布于 2023-02-04 12:41

在Erlang中,我们可以-define(TIME, 60 * 60).从宏的调用中定义一个类似And的宏,例如?TIME我们可以确切地知道它们是宏.

但是,在Elixir中,宏的调用看起来像一个函数调用.我们无法轻易区分宏调用和函数调用.

那么,有没有一种方法可以命名一些像常量一样的宏?

1 个回答
  • 在Erlang中,宏用作模板.因此,-define(TIME, 60 * 60)将有效地引入60 * 60您的源代码(在这种特定情况下可能由编译器预先计算).

    Elixir中的等价物是:

    defmacro time do
     quote do
       60 * 60
     end
    end
    

    但这与Erlang问题完全相同.如果你真的想要计算昂贵的东西,它仍然会在运行时在你使用宏的所有地方计算time.

    也就是说,Elixir有另一种结构,允许您在编译时预先计算一个值,并简单地在您的函数中重复使用,这是通过属性:

    defmodule MyModule do
      @time 60 * 60
    
      def using_time do
        @time
      end
    end
    

    2023-02-04 12:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有