Hi,
I want to express that a function accepts as first argument a tuple of length consistent with the type parameter of the second argument. This
function foo(x::NTuple{M}, b::SomeOtherType{M}) where {M} end
is not what I want, because it restricts the type of the entries of x
to be the same.
Any ideas?
Thanks,
Davide
rdeits
October 23, 2017, 6:13pm
2
You can use a Tuple{Vararg{Any, N}}
:
julia> f(x::Tuple{Vararg{Any, N}}, y::Tuple{Vararg{Any, N}}) where {N} = println(N)
f (generic function with 1 method)
julia> f((1,2.0), ("hello", π))
2
3 Likes
Thanks.
This could be a good edit to the docs .
I believe what you are looking for is this.
function foo(x::NTuple{N,M}, b::SomeOtherType{M}) where {N,M} end
NTuple{M} is and alias for a NTuple of length N, but not type.
Just use f(x::NTuple{M,Any}, b::SomeOtherType{M}) where {M}
, now the entries of x
can be of Any
type.
(which is equivalent to the solution of @rdeits since NTuple{M,Any} = Tuple{Vararg{Any,M}}
).
1 Like
This will only match tuples where the elements have the same type.