Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 在这种情况下我应该使用宏吗?或_Macros_Elixir_Phoenix Framework - Fatal编程技术网

Macros 在这种情况下我应该使用宏吗?或

Macros 在这种情况下我应该使用宏吗?或,macros,elixir,phoenix-framework,Macros,Elixir,Phoenix Framework,比如说,我在Phoenix/Elixir中有一个配置的这部分: use Mix.Config config :my_app, MyApp.Endpoint, var1: 111, var2: 222, var3_depends_on_var2: ???? # var2 + 666 我希望“var3_dependens_on_var2”的值依赖于“var2”,同时我不希望显式复制粘贴它。如果我不能参考它,我相信我应该使用宏来代替。是这样吗?如果是,如何进行?值得付出努力吗?由于这是

比如说,我在Phoenix/Elixir中有一个配置的这部分:

use Mix.Config

config :my_app, MyApp.Endpoint,
  var1: 111,
  var2: 222,
  var3_depends_on_var2: ???? # var2 + 666

我希望“var3_dependens_on_var2”的值依赖于“var2”,同时我不希望显式复制粘贴它。如果我不能参考它,我相信我应该使用宏来代替。是这样吗?如果是,如何进行?值得付出努力吗?

由于这是一个长生不老药脚本文件,您可以只使用普通变量:

use Mix.Config

var2 = 222

config :my_app, MyApp.Endpoint,
  var1: 111,
  var2: var2,
  var3_depends_on_var2: var2 + 666

我想不出任何非超级复杂的方法来处理宏。

因为这些行只不过是对最后一个参数的调用和所有发生的事情,这是一个
关键字
列表,在声明过程中不能简单地引用另一个
关键字

您可以使用的只是初步的
var
声明:

use Mix.Config
var = 222

config :my_app, MyApp.Endpoint,
  var1: 111,
  var2: var,
  var3_depends_on_var2: var + 666

对于宏,甚至没有超复杂的方法来实现这一点,因为
var2
恰好出现在与
var3
相同的术语声明中。由于
关键字
本身尚未定义,目前无法通过
关键字
访问它。我超复杂的方法是将
myconfig:foo,Bar,a:b,c:d,e:f
重写为
a=b;c=d;e=f;配置:foo、Bar、a:a、c:c、e:e
(其中
b
d
f
是表达式)。我想那会管用的。你不能,因为我在第一句中提到的原因。正如Chris McCord所说:使用宏的第一条规则是不应该使用宏。我理解你愿意使用它们只是因为现在你可以,但这是一种错误的方式。没有宏可以做的任何事情都应该没有宏。Пчгггггггзг元编程长生不老药,зззззз。我的意思是,从技术上讲,您可以编写一个宏。但是你最好用这种方式写,而不是用低值的间接方式