scala学习笔记——操做符

 

 

中置操做符(二元操做符),操做符位于两个参数之间。操做符包括字母,好比to,也能够包括操做符字符,好比1->10,等同于方法调用1.->(10)数组

  a 标识符 bapp

  其中的标识符是一个带有两个参数的方法(一个隐式参数和一个显式参数),例如:1 to 10,其实是一个方法调用1.to(10)函数

class Fraction(n: Int, d: Int) {
  val num: Int = n
  val den: Int = d
  //使用操做符的名称来定义一个方法
  def *(other: Fraction) = new Fraction(num* other.num, den* other.den)
}

 

一元操做符,只有一个参数的操做符,分为前置操做符(操做符出如今参数以前,包括+、-、!、~)和后置操做符(操做符出如今参数以后)spa

  a 标识符scala

  上述表达式等同于方法调用a.标识符()。例如:1 toString  等同于 1.toStringcode

 

赋值操做符的名称形式为操做符=,如下表达式
对象

  a 操做符= bblog

  等同于io

  a = a 操做符 btable

      例如 a += b 等同于 a = a+b

  注意:

  1)<=、>=和!=不是赋值运算符

  2)以=开头的操做符不是赋值操做符(==、===、=/=等)

  3)若是a有一个名为操做符=的方法,那么该方法会被直接调用   

 

操做符优先级


  

  

 

  出如今同一行字符所产生的操做符相同优先级。

  

 

结合性

  

  

 

 

apply和update方法

scala容许以下的函数调用方法

  f(arg1,arg2,arg3,...)

扩展到能够应用于函数外的值,若是f不是函数或方法,那么这个表达式就等同于调用

  f.apply(arg1,arg2,arg3,...)

除非上述表达书出如今赋值语句的等号左侧。表达式

  f(arg1,arg2,arg3,...) = value

对应以下调用

  f.update(arg1,arg2,arg3,...,value)

这个机制被应用于数组和映射,例如

 

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

 

  apply方法还常被应用到伴生对象中,用来构造对象而不用显式的使用new。例如

class Fraction(n: Int, d: Int) {
  val num: Int = n
  val den: Int = d
  //使用操做符的名称来定义一个方法
  def *(other: Fraction) = new Fraction(num* other.num, den* other.den)
}


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

  有了这个apply方法,能够直接用Fraction(3,4)来构造一个分数,而不是new Fraction(3,4)。这样在须要大量的Fraction对象须要构造的时候,会很方便,例如

    val result = Fraction(3,4) * Fraction(2,5)

 

提取器

  所谓提取器,就是一个带有unapply方法的对象,能够把unapply当作是伴生对象中apply方法的反操做。apply方法接收构造参数,把它们变成对象。unapply接收一个对象,而后从中提取值——一般这些值就是当初构造对象的值。

相关文章
相关标签/搜索