7中置一元赋值结合apply和updateunapply提取器

Posted 专治spark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7中置一元赋值结合apply和updateunapply提取器相关的知识,希望对你有一定的参考价值。

中置操作符

scala> 1 to 5
res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5)

scala> 1 -> 2
res1: (Int, Int) = (1,2)

scala> 1 until 5
res2: scala.collection.immutable.Range = Range(1, 2, 3, 4)

一元操作符

scala> ~1
res3: Int = -2

scala> -1
res4: Int = -1

scala> +1
res5: Int = 1

scala> 1.unary_~
res6: Int = -2

scala> 1.unary_-
res7: Int = -1

scala> 1.unary_+
res8: Int = 1

赋值操作符

结合性:以 : 结尾的操作符,都是右操作符

scala> 4 +: arr
res23: Array[Int] = Array(4, 1, 2, 3)

scala> arr.+:(4)
res24: Array[Int] = Array(4, 1, 2, 3)

scala> arr :+ 4
res25: Array[Int] = Array(1, 2, 3, 4)

scala> arr.:+(4)
res28: Array[Int] = Array(1, 2, 3, 4)
scala> 1::2::3::Nil
res29: List[Int] = List(1, 2, 3)

apply和update

可自定义apply和update方法

f(arg1,arg2,arg3) 等同于    f.apply(arg1,arg2,arg3)  定义在伴生对象中

如果出现在赋值语句左侧:f(arg1,arg2,arg3) = value,则等同于 f.update(arg1,arg2,arg3,value)  定义在类中

 

unapply

  Option 可空:None空和Some有值

  Fac(a,b) = f

class ApplyDemo(var a:Int,var b:Int) {

  def update(ab:(Int,Int)): Unit ={
    this.a = ab._1
    this.b = ab._2
  }
}

object ApplyDemo {
  def apply(a: Int, b: Int): ApplyDemo = new ApplyDemo(a, b)

  def unapply(arg: ApplyDemo): Option[(Int, Int)] ={
    if(arg.b == 0)None else Some((arg.a,arg.b))
  }

  def main(args: Array[String]): Unit = {
    //apply的使用
    val v1 = new ApplyDemo(1,2)
    val v2 = ApplyDemo(3,4)

    println(v1.a,"	",v1.b)
    println(v2.a,"	",v2.b)

    //update的使用
    v2.update((5,6))
    v2()=(7,8)

    //unapply的使用
    val ApplyDemo(a,b) = v2
    println(a,"	",b)

  }
}

 

以上是关于7中置一元赋值结合apply和updateunapply提取器的主要内容,如果未能解决你的问题,请参考以下文章

Scala--操作符

JavaScript连载7-一元运算符赋值运算符逻辑运算符

第二部分 位运算符赋值运算符三元及一元运算符和语句分类

模块化运输促进物流业高速发展

python魔术方法

gogolang中置new()函数和make()函数的区别