我第一次玩Swift,特别是它的仿制药。作为一项个人练习,我正在实现一个结构来模拟任意n的n维向量。
许多向量运算仅对某些基数有效。例如,将2D矢量添加到3D矢量没有多大意义。交叉乘积只能在一对3或7维向量上计算。
我正在尝试找到一种类型安全的方法,类似于C++'s templates, which let you specify any arbitrary variable as a type。
这是我正在寻找的语法:
var vector2D = Vector<2>(1,2)
var vector3D = Vector<3>(3,4,5)
var fail = vector2D + vector3D //disallowed because of mismatched cardinality.
目前,基数是一个结构成员,其值从参数init()
推断出来。这允许我对基数执行运行时检查,但不能执行编译时。
有没有办法实现这种编译时类型检查?
答案 0 :(得分:2)
Swift目前没有本机依赖类型的数组。不过,您可以自己创建一个,this great blogpost查看@oisdk,深入了解此主题。使用上面提到的代码,你可以得到类似的东西:
let twoLong = emptyArray() +| 1 +| 2
let twoChar = emptyArray() +| "a" +| "b"
onlySameLength(twoLong, rhs: twoChar)
let threeInts = emptyArray() +| 1 +| 2 +| 3
onlySameLength(twoLong, rhs: threeInts) // error
您可以将代码和帖子作为Playground here获取。