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 ...
随机推荐
- javascript call()与apply()
1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...
- MySQL新建用户,授权,删除用户,修改密码总结
首先要声明一下:一般情况下,修改MySQL密码,授权,是需要有mysql里的root权限的. 注:本操作是在WIN命令提示符下,phpMyAdmin同样适用. 用户:rdingcn 用户数据库:rdi ...
- php批量上传图片并把图片名放入数据库
前几天工作中要做这样一个功能,有八百多个系统 生成的会员:给这八百多个系统会员上传图片:然后把图片名放入数据库. 第一步: 第一步肯定是首先把图片上传到对应的图片目录下,直接用框架中已经有的上传类: ...
- CSS 3层嵌套居中布局
<html> <head> <style type="text/css"> .root{ background-color: red; widt ...
- 针对苹果最新审核要求为应用兼容IPv6-备用
在WWDC2015上苹果宣布iOS9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.为确保现有的应用是兼容的,我们需要注意下面几点. 不建议使用底层的网 ...
- 最难忘的Bug调试经历
摘要:目前,著名的社区问答网站Quora上出现一个很火的讨论:你调试过最难的Bug是什么?大家纷纷留言,把自己最痛苦的一次调试经验写下来. 相信每位程序员都有过一段不堪回首地Bug调试经历,程序员一听 ...
- Linux C判断日期格式是否合法
Title:Linux C判断日期格式是否合法 --2013-10-11 11:54 #include <string.h> // strlen() , strncpy() #includ ...
- Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组合
买来<Go Web编程>一书学习Go语言,结果按照书中的步骤搭建,发现部分站点已经失效了,查了网上好多教程也没有人能够说清楚如何搭建.还是自己动手找方法吧,经过自己的不懈努力终于搭建好了. ...
- ios9邮箱添加163邮箱
电脑登陆163邮箱➡️设置➡️开启pop3/smtp/imap功能➡️保存.开启后系统会给你个"客户端授权密码",同时会发短信到你手机里. 打开手机,设置➡️邮件,通讯录,日历➡️ ...
- Scala-函数
package com.mengyao.scala.function /** * Scala函数的声明和使用 * * @author mengyao */object Test1 { //主程序的ma ...