微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift中的运算符优先级重载

在重载自定义类的运算符时,有没有办法覆盖运算符优先级?在我的例子中,应该具有比*更高的优先级.我可以覆盖认的运算符优先级吗?

class Vector{
    var x:Int
    var y:Int
    init(x _x:Int,y _y:Int){
        self.x = _x
        self.y = _y
    }
}

func *(lhs:Vector,rhs:Vector)->Int{
    return lhs.x * rhs.y + rhs.x + rhs.y
}

func +(lhs:Vector,rhs:Vector)->Vector{
    return Vector(x: lhs.x + rhs.x,y: lhs.y + rhs.y)
}

var v1 = Vector(x: 6,y: 1)
var v2 = Vector(x: 3,y: 1)


v1 * v2 + v1

解决方法

嗯.它实际上似乎你可以.

operator infix + { associativity left precedence 140 }
operator infix * { associativity left precedence 30 }

let x = 3 + 4 * 5 // outputs 35

但据我所知,这只能在“文件范围”完成,至少根据在类中包含它所产生的编译器错误.

‘operator’ may only be declared at file scope.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐