在Swift元组上定义前缀运算符
这可能是一个在Swift元组上定义前缀运算符,swift,tuples,prefix-operator,Swift,Tuples,Prefix Operator,这可能是一个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) ^ 这是我的虫子还是斯威夫特的?还是有解决办法 请注
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)
^
这是我的虫子还是斯威夫特的?还是有解决办法
请注意,将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)
元组上的中缀运算符也可以很好地工作。我认为问题在于 类和结构可以提供它们自己的 现有运营商
元组既不是类也不是结构(元组有0或1个值除外,这是Void和type的等价物)。例如,如果您从元组中删除“y”组件,只留下“x”,那么代码就会编译。别介意;我认为这只是一个错误
正如我在上面的评论中所指出的,有(如果你有这个问题,你可能会投赞成票)。也许你说的有些道理,但有一点你可以定义前缀操作符而不会出错;你就是不能用它。第二,你可以定义和使用中缀操作符和元组。是的,我只是注意到你的评论中缀操作符工作。我只是在IBM的sandbox上进行了尝试,您的代码没有编译(编辑:它确实编译了,如果您定义了前缀,则不会有任何抱怨,但不要使用它)。我遇到了描述此问题的错误,但它没有看到任何活动或得到任何响应:很好。如果您将最后一行更改为
((Pt(x:5,y:6))
,则它可以工作。听起来像虫子。谢谢你的解决办法。我没有注意到bug报告中有这样的说法。