在 Swift 元组上定义前缀运算符
Define a prefix operator on a Swift tuple
这可能是一个 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)
^
这是我的错误还是 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)
而且元组上的中缀运算符也能正常工作。
我认为问题是根据 documentation,
Classes and structures can provide their own implementations of
existing operators.
元组既不是 class 也不是结构(具有 0 或 1 值的元组除外,它们等同于 Void 和类型)。例如,如果您从元组中删除 'y' 组件,只留下 'x',则代码会编译。
伙计们,没关系;我认为这只是一个错误。
正如我在上面的评论中指出的那样,有 this bug filed for it(如果您遇到此问题,您可能会投票给它)。
这可能是一个 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)
^
这是我的错误还是 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)
而且元组上的中缀运算符也能正常工作。
我认为问题是根据 documentation,
Classes and structures can provide their own implementations of existing operators.
元组既不是 class 也不是结构(具有 0 或 1 值的元组除外,它们等同于 Void 和类型)。例如,如果您从元组中删除 'y' 组件,只留下 'x',则代码会编译。
伙计们,没关系;我认为这只是一个错误。
正如我在上面的评论中指出的那样,有 this bug filed for it(如果您遇到此问题,您可能会投票给它)。