zoukankan      html  css  js  c++  java
  • scala学习笔记——操作符

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

      a 标识符 b

      其中的标识符是一个带有两个参数的方法(一个隐式参数和一个显式参数),例如: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)
    }

    一元操作符,只有一个参数的操作符,分为前置操作符(操作符出现在参数之前,包括+、-、!、~)和后置操作符(操作符出现在参数之后)

      a 标识符

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

    赋值操作符的名称形式为操作符=,以下表达式

      a 操作符= b

      等同于

      a = a 操作符 b

          例如 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接收一个对象,然后从中提取值——通常这些值就是当初构造对象的值。

     

  • 相关阅读:
    [转] 32位 PL/SQL Develope r如何连接64位的Oracle 图解
    UML对象图和包图
    推断的距离1970年1一个月1天从日期数
    Cocos2d-x3.0 RenderTexture(一) 保存
    翻转名单
    Session or Cookie?是否有必要使用Tomcat等一下Web集装箱Session
    【Socket规划】套接字Windows台C语言
    配置主机路由表(route)(两)
    springMVC3得知(五岁以下儿童)--MultiActionController
    JQUERY 选择
  • 原文地址:https://www.cnblogs.com/suinlove/p/5586875.html
Copyright © 2011-2022 走看看