Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Swift元组上定义前缀运算符_Swift_Tuples_Prefix Operator - Fatal编程技术网

在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报告中有这样的说法。