Swift 如何对使用@infix func**()的指数使用**?
我想使用Swift 如何对使用@infix func**()的指数使用**?,swift,operators,infix-operator,Swift,Operators,Infix Operator,我想使用**重载指数函数。如果我使用像“^”这样的东西,我可以工作,但是python的工作方式是**,我想在Swift中使用它。有办法吗 错误:运算符实现没有匹配的运算符声明 在定义函数之前,需要声明运算符,如下所示: 在Swift 2中: import Darwin infix operator ** {} func ** (num: Double, power: Double) -> Double { return pow(num, power) } println(8.
**
重载指数函数。如果我使用像“^”这样的东西,我可以工作,但是python的工作方式是**
,我想在Swift中使用它。有办法吗
错误:运算符实现没有匹配的运算符声明
在定义函数之前,需要声明运算符,如下所示: 在Swift 2中:
import Darwin
infix operator ** {}
func ** (num: Double, power: Double) -> Double {
return pow(num, power)
}
println(8.0 ** 3.0) // works
在Swift 3中:
import Darwin
infix operator **
func ** (num: Double, power: Double) -> Double {
return pow(num, power)
}
print(8.0 ** 3.0) // works
要确保在相邻*或/之前执行**,最好设置优先级
infix operator ** { associativity left precedence 160 }
如图所示,指数运算符具有160个优先级,就像>按位移位运算符一样。您确定
^
按预期工作吗?我只把它作为加法:println(1^2)==3
@vol7ron^
是按位异或运算符1^2
恰好等于1+2
。请参阅,语言指南->高级运算符->按位异或运算符。@Lensflare:我刚才说的是Python,其中^
不作为指数。我认为我错了,误读了这个问题,这表明他可以在Swift中重载^
来充当插入符号,但他想使用**
,当尝试重载时,它不起作用。您需要使用Jamie的答案告诉编译器您要使用的函数名。从beta 6开始,它必须是infix operator**{}
。谢谢@Klaas,我更新了Xcode 6 beta 6.Swift3的答案:infix operator**
谢谢@GitSyncApp,我也用Swift 3代码更新了答案。
infix operator ** { associativity left precedence 160 }