【发布时间】:2017-09-13 13:37:38
【问题描述】:
如果我有 2 个变量,a=[.3, .2, .4]; b=[.1, .2, .3]; 我可以使用宏创建一个带有变量名称的字符串:
macro varname(arg)
string(arg)
end
@varname(a)
现在说我有一个函数,我想向它传递任意数量的参数,并使用为函数提供的实际变量名称来创建字典键:
function test(arguments...)
Dict(Symbol(@varname(i)) => i for i in arguments)
end
这行不通,因为@varname 将采用i 并创建"i",例如:
out=test(a,b)
我想要的输出是:
Dict("a" => [.3, .2, .4], "b" => [.1, .2, .3])
有没有办法实现这种行为?
【问题讨论】:
-
如果
arguments是位置参数的可变长度元组,那么它们没有名称。另一方面,如果定义是function test(;arguments...),这使得arguments命名参数,那么Dict(a[1]=>a[2] for a in arguments)通常应该可以工作(除了参数名称重复等的极端情况)。