【发布时间】:2022-01-21 04:35:20
【问题描述】:
你将如何实现这样的功能:
function foo(a,b...,c)
println(a,b,c)
end
foo(2,3,3,"last")
=> a = 2 , b = (3,3) , c = "最后一个"
我不能使用类似的东西:
function foo(a,b...)
c = b[end]
println(a,b,c)
end
因为我想在 c 上调度, IE。 我想要方法:
foo(a,b...,c::Foo)
和
foo(a,b...,c::Bar)
我也不能有这样的东西:
foo_wrapper(a,b...) = foo(a,b[1:end-1],b[end])
因为我也想在 foo 上进行调度。
这可能吗?
【问题讨论】:
-
不,这目前是不可能的。请参阅github.com/JuliaLang/julia/issues/42036#issuecomment-909923031 了解其中的一些困难。
-
您所说的“一般在 foo 上”调度是什么意思?因为您可以为
foo(a::Yada, c::Blah, b...)创建多个基于 a 和 c 调度 foo 的方法,然后编写单个方法foo_wrapper(a,b...) = foo(a, b[end], b[1:end-1])来重新排序 foo 的参数。
标签: function julia multiple-dispatch