Scala学习笔记03:操作符

Stella981
• 阅读 730

Scala学习笔记03:操作符

一、scala中操作符与方法的等价性

scala中操作符即方法、方法即操作符。scala中操作符其实是普通方法调用的另一种表现形式,运算符的使用其实就是隐含地调用对应的方法。

1、操作符即方法

Scala学习笔记03:操作符

运行结果如下:

Scala学习笔记03:操作符

2、方法即操作符

var str = "abcdef";
var x1 = str.indexOf("c");
var x2 = str indexOf "c";
var x3 = str.substring(2, 4);
var x4 = str substring (2,4) // 如果参数有多个,需要用小括号包起来 
var x5 = str.toUpperCase();
var x6 = str.toUpperCase; // 方法调用时如果不需要传入任何参数,小括号可以省略
var x7 = str toUpperCase; // 这种写法,如果没有参数,则括号不用写

(1)单参数方法

Scala学习笔记03:操作符

运行结果如下:

Scala学习笔记03:操作符

(2)多参数方法

Scala学习笔记03:操作符

运行结果如下:

Scala学习笔记03:操作符

(3)无参方法

Scala学习笔记03:操作符

运行结果如下:

Scala学习笔记03:操作符

2、scala操作类型

(1)算术运算:+、-、*、/

(2)关系运算:>、<、>=、<=

(3)逻辑运算:&& 、||、!

(4)位运算:>>、>>>、<< 、~、 &、 |、 ^

(5)比较运算:==、!=

和Java基本相同,不同之处在于比较运算符:

  • Java中,如果是基本数据类型,==与!= 比较的是值;如果是复杂数据类型,比较的是对象的地址,如果不是想比较地址而是想比较真正的内容,则需要使用 equals 方法。

Scala学习笔记03:操作符

  • Scala中,如果是基本数据类型,==与!= 比较的是值;如果是复杂数据类型,会隐含地调用equals进行比较,这也就意味着 Scala中不存在Java中经典的equals问题。

Scala学习笔记03:操作符

3、操作符种类

(1)中缀操作符

操作符在两个操作数之间 2 + 3 等同于 (2).+(3)

Scala学习笔记03:操作符

(2)前缀操作符

操作符在唯一的操作数之前 -1、+3、 ~0xFF、!false

-1等同于(1).unary_-,前缀操作符如同中缀操作符一样,也是方法调用的另一种方式,不同的是,方法名要在符号前加上前缀unary_ 。

能作为前缀操作符的操作符只有+、-、!、~四种。如果你自己定义了unary_!方法就可以使用!前缀操作符来调用方法了,但是即使你定义了unary_*,*也不能用来调用该方法,因为*不是四种可用的前缀操作符之一。

Scala学习笔记03:操作符

Scala学习笔记03:操作符

Scala学习笔记03:操作符

Scala学习笔记03:操作符

(3)后缀操作符

操作符在唯一的操作数之后 str toUpperCase 等同于 str.toUpperCase(),后缀操作符是不用点或括号调用的不带任何参数的方法。在Scala里,方法调用的空括号可以省略,但是如果去掉括号可能造成副作用就带上括号。

Scala学习笔记03:操作符

4、操作符优先级

由于scala并没有真正的操作符,操作符其实是方法的一种形式,所以此处操作符的优先级,其实就是指方法的优先级

在scala中方法的执行是有优先级的区别的。这也是为了解决传统操作符优先级的问题的。

例如:3 + 2 * 5,我们期望获得的是13,但是根据scala特点,scala中所有操作符其实就是方法,那么按照这种说法,表达式应该等同于:(3).+(2) 得到5,(5).*(5) 得到25,与我们的预期不符!scala如何解决此问题呢?靠的是操作符的优先级。

Scala学习笔记03:操作符

scala中操作符(方法)的优先级是根据操作符(方法)的首字符决定的,以下符号越靠上优先级越高:

* / %

+ -

:

!=

<>

&

^

|

所有字母

所有赋值操作符

另外如果操作符以=结尾,且操作符并非比较操作符 <=、>=、==或=,则操作符优先级等同于=,即优先级最低,例如 +=、-=等;同级别优先级从左到右统计;可以使用括号改变优先级,且这是个好习惯,特别是在scala这种可能过于简洁的语言中。特殊的是,以:字符结尾的方法由它的右操作数调用,并传入左操作数。以其他字符结尾的方法与之相反。a :: b 对应的是 (b).::(a) 而不是 (a).::(b)。

本文分享 CSDN - howard2005。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql数据过滤
1、AND操作符:select表的字段名from对应的表名where表的字段名AND表的字段名运算符值;例子:selectprod\_id,prod\_price,prod\_namefromproductswhereven\_id1003ANDprod\_price<10;2、OR操作符:sele
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Scala函数
一、方法方法定义Scala中/%的作用和Java一样,但是特别的是,这些操作符实际上是方法。1to101.to(10)defm2(a:Int,b:Int):Intabdefm
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这