加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift中的运算符优先级重载

发布时间:2020-12-14 04:49:54 所属栏目:百科 来源:网络整理
导读:在重载自定义类的运算符时,有没有办法覆盖运算符优先级?在我的例子中,应该具有比*更高的优先级.我可以覆盖默认的运算符优先级吗? 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)-I
在重载自定义类的运算符时,有没有办法覆盖运算符优先级?在我的例子中,应该具有比*更高的优先级.我可以覆盖默认的运算符优先级吗?

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读