固定大小的非齐次元组

时间:2018-07-26 13:00:59

标签: tuples julia

有什么方法可以定义仅接受固定大小的元组,但其中包含不同数据类型的函数?

我们可以使用类似的东西

f(x::NTuple{N}...) where {N} = ...

强制执行相同大小(但内容类型相同)的元组,并且类似这样

f(x::Tuple...) = ...

接受非均质序列(但长度可变)。

有什么办法可以同时实现这两者?

1 个答案:

答案 0 :(得分:3)

组是协变的,请参见https://docs.julialang.org/en/latest/manual/types/#Tuple-Types-1,因此您可以使用Any来允许任何类型。因此,您可以通过以下方式之一进行操作:

f(x::Tuple{Any,Any}...)  = ...

这对于元素较少的元组可能是可以的,或者这样:

f(x::Tuple{Vararg{Any,10}}...) = ...

f(x::NTuple{10, Any}...) = ...

这是一种通用方法,允许您使用参数(在此示例中为10)来指定元组的元素数。

如果您不知道元组的大小,而只是希望它们的大小相同,则可以编写:

f(x::Tuple{Vararg{Any,N}}...) where N = ...

f(x::NTuple{N, Any}...) where N = ...