您將如何實作這樣的功能:
function foo(a,b...,c)
println(a,b,c)
end
foo(2,3,3,"last")
=> a = 2 , b = (3,3) , c = "last"
我不能使用類似的東西:
function foo(a,b...)
c = b[end]
println(a,b,c)
end
因為我想在 c 上調度,即我想要有方法:
foo(a,b...,c::Foo)
和
foo(a,b...,c::Bar)
我也不能有這樣的事情:
foo_wrapper(a,b...) = foo(a,b[1:end-1],b[end])
因為我也想在一般情況下對 foo 進行調度。
這有可能嗎?
uj5u.com熱心網友回復:
您可以反轉順序,然后在輔助函式上調度:
function foo(a,d...)
c = last(d)
b = d[begin:end-1]
return _foo(a,c,b...)
end
function _foo(a,c::Int,b...)
return c 1
end
function _foo(a,c::Float64,b...)
return 2*c
end
在 REPL 中:
julia> foo(1,2,3,4,5,6)
7
julia> foo(1,2,3,4,5,6.0)
12.0
julia> foo(1,2,8.0)
16.0
julia> foo(1,90) #b is of length zero in this case
91
uj5u.com熱心網友回復:
唯一的選擇是將其c作為關鍵字引數,例如:
function foo(a,b...;c)
println(a," ",b," ",c)
end
現在你可以這樣做:
julia> foo(1,2,3;c="aa")
1 (2, 3) aa
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/387365.html
