Noa*_*ues 2 macros constants naming-conventions elixir
在Erlang中,我们可以-define(TIME, 60 * 60).从宏的调用中定义一个类似And的宏,例如?TIME我们可以确切地知道它们是宏.
但是,在Elixir中,宏的调用看起来像一个函数调用.我们无法轻易区分宏调用和函数调用.
那么,有没有一种方法可以命名一些像常量一样的宏?
在Erlang中,宏用作模板.因此,-define(TIME, 60 * 60)将有效地引入60 * 60您的源代码(在这种特定情况下可能由编译器预先计算).
Elixir中的等价物是:
defmacro time do
quote do
60 * 60
end
end
Run Code Online (Sandbox Code Playgroud)
但这与Erlang问题完全相同.如果你真的想要计算昂贵的东西,它仍然会在运行时在你使用宏的所有地方计算time.
也就是说,Elixir有另一种结构,允许您在编译时预先计算一个值,并简单地在您的函数中重复使用,这是通过属性:
defmodule MyModule do
@time 60 * 60
def using_time do
@time
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |