中置操作符(二元操作符),操作符位于两个参数之间。操作符包括字母,比如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接收一个对象,然后从中提取值——通常这些值就是当初构造对象的值。

scala学习笔记——操作符的更多相关文章

  1. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  2. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  3. RxJava学习笔记(操作符)

    前言 上一篇文章介绍了RxJava的基础知识和简单实现,篇幅已经比较多了,所以把操作符(Operators)相关的内容放在这一篇.有了上一篇文章的基础,相信会比较容易理解操作符相关的内容了. 操作符( ...

  4. Scala学习笔记之:tuple、array、Map

    [TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...

  5. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  6. Scala学习笔记(二):object、伴生对象和基本类

    object object 是只有一个实例的类.它的定义与Java中的class类似,如: // 单例对象 object AppEntry { def main(args: Array[String] ...

  7. scala 学习笔记九 定义操作符

    Scala中方法名可以包含几乎所有字符,还可以对操作符+赋予新的含义 上面例子中136行,用下划线来表示“缺省初始化值” 上面151行和153行都是通过圆点表示法进行调用 157行和159行用中缀表示 ...

  8. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  9. 原创:Scala学习笔记(不断更新)

    Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/w ...

随机推荐

  1. C#泛型理解(转)

    [译]C# 理解泛型  PDF 浏览:http://www.tracefact.net/document/generics-in-csharp.pdf源码下载:http://www.tracefact ...

  2. IOS开发之免费证书+不越狱真机调试

      本文转自:http://www.cnblogs.com/weii/p/4688299.html 苹果发布Xcode7后, 开放了普通的AppleID也能真机调试,非$99 或 $299, 只要能上 ...

  3. 编写 capture filters

    编写 capture filters 如有转载,请在转载前给我提一些建议.谢谢. 百度查不到资料,为无能的百度搜索增加点营养的料. 读 http://www.n-cg.net/CaptureFilte ...

  4. 获取Map API Key

    开发人员在基于Google Maps服务进行开发之前,需要申请一组验证过的Map API Key,这样才可以使用Google Maps服务.申请过程如下:1.在Eclipse中打开“Window”|“ ...

  5. AD怎样画 board shape

    先用随便那一层的线,画出你想要的边框的形状,圆角可通过shift+空格来切换出来选中你刚刚话的形状(要是闭合面),design-board sharp-define from selected obj ...

  6. WIN7下关闭驱动数字签名检查的方法

    内容是转的,最后一步貌似没什么用处,水印是去不掉的,不过也无所谓,关键是驱动能用了,要不完全瞎了 实测win7 32位旗舰版可用   ================================= ...

  7. css之marquee,让你的文字跳起来

    当你看到别人的网页文字动态效果美美哒,而你却为不会使用js而遗憾时,不妨看看这篇文章,教你如何只用css即可实现漂亮的文字滑动效果. 1.问题提出: 在一个特定大小的div中,如何让p标签内的内容动态 ...

  8. c#—— Task.FromResult 的使用

    Task.FromResult用来创建一个带返回值的.已完成的Task. 场景一:以同步的方式实现一个异步接口方法 比如有一个接口包含异步方法. interface IMyInterface { Ta ...

  9. COJ 0026 汉诺塔问题

    汉诺塔问题 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 经典的汉诺塔游戏相信很多同学都会玩的,规则就不用赘述,百科一下就OK ...

  10. HDU_1238——最大子串搜索

    Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...