【发布时间】:2018-07-06 21:49:02
【问题描述】:
我正在尝试在 Julia 中为具有三个元素的向量定义一个类型(结构?)。我认为我找到的最接近的东西 Optimally passing dimensions of fixed size array in julia 和 Declare the size of an array attribute in a type definition,但是这些都是 pre-0.6,因为不可变不再是一个东西。而且,这似乎是错误的。
用例是我知道我的函数将采用并希望拥有的向量的大小
function myFunc(v::threeVec,u::threeVec)
Do stuff to u and v
end
进一步搜索引导我构造函数。 https://docs.julialang.org/en/stable/manual/constructors/ 特别是我看到了这个例子
struct OrderedPair
x::Real
y::Real
OrderedPair(x,y) = x > y ? error("out of order") : new(x,y)
end
但是,这是一个单独的对象,即便如此,我也不确定如何将类似的东西传递给函数。我考虑改用三元组,因为它们的类型为 Tuple(Int,Int,Int) 但是我将对 u 和 v 进行向量/矩阵运算,所以我不必转换它们。
我可以在函数内部检查向量长度,但我在提示中读到,由于调度程序,它更喜欢为此使用类型。对于这个特定的功能,在这种情况下这是一种合理的做法,但在其他用例中,这可能不是一个好主意,所以我现在想以“正确的方式”来做。
【问题讨论】:
-
我建议您查看github.com/JuliaArrays/StaticArrays.jl,如果它适合您的需求。
-
这绝对有用,但我希望在不对绑定进行任何特殊声明的情况下传递“正常”向量。
-
StaticArrays.jl 绝对是要走的路。您可以为长度为 3 的静态数组设置类型别名,如您的示例所示,将其命名为
ThreeVec。你可以自己实现一个类型,但鉴于那里有许多数组包,这似乎没有必要。 -
如果有人可以做一个简单的工作示例,我很乐意将其作为答案,但是我自己在 StaticArrays 方面的工作并不出色。
-
您能解释一下您对 StaticArrays 的缺失或不便之处。我发现它是一个很棒的包,所以我很好奇你不喜欢它的什么。