One-Way
爱一人,攀一山,追一梦

 

一、标识符

 

 

二、中置操作符

中置表达式,操作符位于两个参数之间

1 to 10

1.to(10)

1 -> 10

1.->(10)

 

三、一元操作符

a.标识符()

1 toString

1.toString()

+、-、!、~ 可以作为前置操作符,转换成名为 unary_操作符 的方法调用

-a  和 a.unary_-  一样 

 

四、赋值操作符

a+=b   a = a + b

 

五、优先级

+ ->优先级相同 

中置操作符高于后置操作符

a 中置操作符 b 后置操作符  等同于

(a 中置操作符 b) 后置操作符

 

六、结合性

所有操作符都是左结合的,除了:

  • :操作符
  • 赋值操作符

构造列表的操作符::是右结合的
1::2::Nil     1::(2::Nil)

2::Nil   Nil.::(2)  右结合的二元操作符是其第二个参数的方法

 

七、apply和update方法

用于数组和映射

f.update(arg1, arg2, ..., value)     f(arg1,arg2,...) = value  更新值

f.apply(arg1,arg2,...)                  f(arg1,arg2,...)               获取值

  val scores = new scala.collection.mutable.HashMap[String,Int]
  scores("Bob") = 100  // scores.update("Bob",100) 
  val bobsScore = scores("Bob")  // val bobsScore = scores.apply("Bob")
  println(bobsScore)

被用在伴生对象中,用来构造对象而不用显示地使用new

  class Fraction(n:Int, d:Int){
    
  }

  object Fraction{
    def apply(n:Int, d:Int) = new Fraction(n, d)
  }

这样直接可以使用Fraction(3,4)来构造出一个分数,而不用 new Fraction(3,4)

 

八、提取器

所谓提取器就是一个带有unapply方法的对象,把unapply当做伴生对象中apply方法的反向操作。

unapply方法接收一个对象,然后从中提取值,通常这些值是当初用来构造对象的参数值

unapply返回的是一个Option,包含一个元组。

  object Fraction{
    def apply(n:Int, d:Int) = new Fraction(n, d)
    def unapply(input: Fraction) ={
      if(input.den == 0) None else Some((input.num, input.den))
    }
  }

此例中返回Option[(Int, Int)]

 

九、带单个参数或无参数的提取器

 

 

 

十、unapplySeq方法

 

 

参考《快学Scala》

posted on 2016-09-01 23:53  单行道|  阅读(1159)  评论(0编辑  收藏  举报