【发布时间】:2018-06-16 18:10:45
【问题描述】:
我正在编写结构来表示向量和矩阵,并使用一些运算符来处理它们。但是这些运算符的一些示例用法会产生我无法解释的类型错误。
这是我的库中的精简摘录(A 是矩阵类型,B 是向量类型,感兴趣的人可以使用):
struct A { }
struct B { }
func *(left: A, right: A) -> A { return A() }
func *(left: A, right: B) -> B { return B() }
let a: A = A()
let b: B = (a * a) * B()
在 Swift Playground 中运行它会产生以下编译器错误:
error: Test.playground:2:20: error: 'A' is not convertible to 'B'
let b: B = (a * a) * B()
~~~~~~~~^~~~~
内联一些变量,将a * a 提取为单独的变量和/或在某些情况下从变量中删除类型注释可以解决错误或产生不同的错误。
我不是在寻找解决方法,我只是想了解这里发生了什么,是我做错了什么还是我是否在编译器中发现了错误。
我正在运行 Xcode 9.2。
【问题讨论】:
-
大声笑这也有效:
{ a * a }() * B()或{ $0 * $0 }(a) * B():p
标签: swift types operator-overloading