我想使用NTuples作为参数定义函数,但要使用大小限制。
想法是声明类似以下内容的
foo(x::NTuple{K-1,Int},y::NTuple{K,Int}) where {K} = "ok"
但这不是正确的Julia代码。
我的问题是:如何在Julia中定义此类功能?
(仅出于说明目的):对于C ++编码人员,我的问题等同于“如何翻译这种C ++代码
template <size_t N>
foo(const std::array<int, N-1>& x, const std::array<int, N>& y)
{ ... }
转换为格式正确的Julia代码。”
答案 0 :(得分:5)
在这种情况下,您可以执行以下操作:
foo(x::NTuple{M,Int},y::Tuple{Int, Vararg{Int,M}}) where {M} = "ok"
因为尺寸上的差异是固定的。
在更一般的情况下,我唯一了解的就是在函数内部添加条件:
foo(x::NTuple{M,Int},y::NTuple{K,Int}) where {M,K} =
M + 1 == K ? "ok" : throw(ArgumentError("dimension mismatch"))
,条件检查应该由编译器优化(至少在这种情况下,它似乎在Julia 1.0.3下进行了优化)。