2

这可能是一个swiftc错误,但在元组上定义前缀运算符似乎不起作用:

typealias Pt = (x: Int, y: Int)
prefix func - (p: Pt) -> Pt { return (-p.x, -p.y) }
-Pt(5,6)

结果是:

error: unary operator '-' cannot be applied to an operand of type '(Int, Int)'
-(5,6)
 ^

这是我的 bug 还是 Swift 的?或者有解决方法吗?

请注意,定义Pt为结构可以正常工作:

struct Pt { var x: Int, y: Int }
prefix func - (p: Pt) -> Pt { return Pt(x: -p.x, y: -p.y) }
-Pt(x: 5, y: 6)  // is equal to Pt(x: -5, y: -6)

元组上的中缀运算符也可以正常工作。

4

2 回答 2

2

没关系,伙计们;我认为这只是一个错误。

正如我在上面的评论中指出的那样,有这个错误提交(如果你遇到这个问题,你可以投票)。

于 2016-01-29T01:03:51.753 回答
0

我认为问题在于根据文档

类和结构可以提供它们自己的现有操作符实现。

元组既不是类也不是结构(除了具有 0 或 1 值的元组,它相当于 Void 和类型)。例如,如果您从元组中删除“y”组件,只留下“x”,那么代码就会编译。

于 2016-01-29T00:36:10.200 回答