操作符

作者: fordring2008 | 来源:发表于2017-02-03 23:17 被阅读22次

    struct Vector2D {

    var x =0.0

    var y =0.0

    }

    //重新定义+操作符

    func +(left:Vector2D, right:Vector2D)->Vector2D{

    return Vector2D(x: left.x+ right.x, y: left.y+ right.y)

    }

    func *= (left:Vector2D, right:Vector2D)->Double{

    return left.x* right.x+ left.y* right.y

    }

    letv1 =Vector2D(x:1.0, y:2.0)

    letv2 =Vector2D(x:3.0, y:4.0)

    letd =v1*=v2// 11

    //定义一个操作符优先级的代码

    /*

    precedencegroup定义一个操作费优先级别。操作符优先级别的定义和类型声明有些相似,一个操作符优先级需要属于某个特定的优先级。Swift标准库中已经定义了一些常用的运算优先级组,比如加法优先级AdditionPrecedence和乘法优先级MultipcationPrecedence等。如果没有适合你的运算发优先级组,你就需要向下面代码那样,自己制定结合律方式和优先级顺序

    swift符号优先级查询

    https://github.com/apple/swift-evolution/blob/master/proposals/0077-operator-precedence.md

    */

    /*

    associativity定义结合律,即如果多个同类的操作符出现的计算顺序。比如常见的加法和减法都是left,就是说多个加法同事出现时按照从左到右的顺序计算(因为加法满足交换律,所以这个顺序无所谓,但是减法的话计算顺序就很重要了)。点乘的结果是一个Double,不再和其他点乘结合使用,所以这里使用none

    */

    /*

    higtherThan ,运算的优先级,点积运算是优先于乘法运算的。除了higherThan,也支持使用lowerThan来指定优先级低于某个其他组

    */

    /*

    infix表示要定义的是一个中位操作符,即前后都是输入;其他的修饰符还包括prefix和postfix、

    */

    precedencegroup DotPrecedence {

    associativity: none

    higherThan: MultiplicationPrecedence

    }

    infixoperator +* : DotPrecedence

    相关文章

      网友评论

          本文标题:操作符

          本文链接:https://www.haomeiwen.com/subject/xrcjittx.html