Julia:使用 splat 传递参数
Julia: using splat to pass along arguments
我正在尝试编写一个函数来调用多个接受命名参数的函数。我希望 A 函数能够命名在 args 中分散在一起的参数,并将匹配的参数传递给它调用的函数。
function A(x, y; args...)
B(x; args...)
C(y; args...)
end
function B(x; a=0)
println(x,a)
end
function C(y; a=0, b=0)
println(y,a,b)
end
funcA(1, 2) # Works
funcA(1, 2, a=1) # Works
funcA(1, 2, a=1, b=1) # Error: unrecognized keyword argument "b"
使它起作用的首选方法是什么?将 "args..." 添加到 B 的参数列表中可修复错误,但我不确定这是否是个好主意(例如,是否会影响性能)。
您的解决方案是首选方式
function A(x, y; args...)
B(x; args...)
C(y; args...)
end
function B(x; a=0, _...) # catch rest
println(x,a)
end
function C(y; a=0, b=0)
println(y,a,b)
end
A(1, 2) # Works
A(1, 2, a=1) # Works
A(1, 2, a=1, b=1) # Works
_
没有什么特别的意思,用你觉得最好的就可以了。
至于性能,我怀疑它是否引人注目。您是否在热循环中多次调用 B 并在计算中使用关键字参数的值?它们的类型不是很好,所以这可能是唯一的事情(尽管它与特定问题并不真正相关)。
我正在尝试编写一个函数来调用多个接受命名参数的函数。我希望 A 函数能够命名在 args 中分散在一起的参数,并将匹配的参数传递给它调用的函数。
function A(x, y; args...)
B(x; args...)
C(y; args...)
end
function B(x; a=0)
println(x,a)
end
function C(y; a=0, b=0)
println(y,a,b)
end
funcA(1, 2) # Works
funcA(1, 2, a=1) # Works
funcA(1, 2, a=1, b=1) # Error: unrecognized keyword argument "b"
使它起作用的首选方法是什么?将 "args..." 添加到 B 的参数列表中可修复错误,但我不确定这是否是个好主意(例如,是否会影响性能)。
您的解决方案是首选方式
function A(x, y; args...)
B(x; args...)
C(y; args...)
end
function B(x; a=0, _...) # catch rest
println(x,a)
end
function C(y; a=0, b=0)
println(y,a,b)
end
A(1, 2) # Works
A(1, 2, a=1) # Works
A(1, 2, a=1, b=1) # Works
_
没有什么特别的意思,用你觉得最好的就可以了。
至于性能,我怀疑它是否引人注目。您是否在热循环中多次调用 B 并在计算中使用关键字参数的值?它们的类型不是很好,所以这可能是唯一的事情(尽管它与特定问题并不真正相关)。