首页 > 解决方案 > 固定大小的非同质元组

问题描述

有没有办法定义一个只接受固定大小的元组但其中有不同数据类型的函数?

我们可以使用这样的东西

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

强制执行相同大小的元组(但具有相同类型的内容),以及类似这样的东西

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

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

有没有办法同时实现两者?

标签: tuplesjulia

解决方案


元组是协变的,请参阅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 = ...

推荐阅读