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接收一个对象,然后从中提取值——通常这些值就是当初构造对象的值。
scala学习笔记——操作符的更多相关文章
- 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性
基于.net的分布式系统限流组件 在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...
- Scala学习笔记及与Java不同之处总结-从Java开发者角度
Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...
- RxJava学习笔记(操作符)
前言 上一篇文章介绍了RxJava的基础知识和简单实现,篇幅已经比较多了,所以把操作符(Operators)相关的内容放在这一篇.有了上一篇文章的基础,相信会比较容易理解操作符相关的内容了. 操作符( ...
- Scala学习笔记之:tuple、array、Map
[TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- Scala学习笔记(二):object、伴生对象和基本类
object object 是只有一个实例的类.它的定义与Java中的class类似,如: // 单例对象 object AppEntry { def main(args: Array[String] ...
- scala 学习笔记九 定义操作符
Scala中方法名可以包含几乎所有字符,还可以对操作符+赋予新的含义 上面例子中136行,用下划线来表示“缺省初始化值” 上面151行和153行都是通过圆点表示法进行调用 157行和159行用中缀表示 ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- 原创:Scala学习笔记(不断更新)
Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/w ...
随机推荐
- asp.net 解决IE11下 From身份验证失效问题
指定如何将 Cookie 用于 Web 应用程序. <forms cookieless="UseCookies" name="test" loginUrl ...
- Day02
1.os.system()和os.popen() os.popen() 功能强于os.system() , os.popen() 可以返回回显的内容,以文件描述符返回 eg: import os re ...
- 安卓4.2原生rom状态栏显示运营商
前言:要调整状态栏布局,需反编译systemui.apk.单卡机修改status_bar.xml和signal_cluster_view.xml,双卡机修改gemini_status_bar.xml和 ...
- android数据保存
永久保存数据的方法:1.Shared Preferences 以键值对的形式存储基本数据类型( booleans, floats, ints, longs, and strings),存储的数据在限制 ...
- Codeforces 235E Number Challenge
http://codeforces.com/contest/235/problem/E 远距离orz......rng_58 证明可以见这里(可能要FQ才能看到) 还是copy一下证明吧: 记 $$f ...
- 5s
整理,整顿,清楚,清洁,身美
- HDU_2050——折线分割平面问题,递推
Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ...
- openstacks
- velocity自定义动画
话说好久没有写博客了,零星的整理了一些东西,没有形成系统,所以也没有在这里记录. 废话不多说了,进入今天的正题.不知道大家是否记得之前写过的一篇文章<制作炫酷的专题页面& ...
- Objective-C实现变参函数
原文:http://www.tanhao.me/pieces/1104.html NSLog(NSString *format, ...) + (id)arrayWithObjects:(id ...