文档章节

基本类型和操作之操作符和方法

柳哥
 柳哥
发布于 2014/06/06 10:24
字数 1038
阅读 130
收藏 1

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

Scala为基本类型提供了丰富的操作符集,这些操作符实际只是普通方法调用的另一种表现形式。例如, 1 + 2与 (1).+(2) 其实是一回事。换句话说,就是Int类包含了叫做+的方法,它传入一个Int参数并返回一个Int结果,如例:


实际上,Int包含了+的各种类型参数的重载方法。例如,另一个也叫+的方法的参数和返回类型都是Long。如果把Long加到Int上,就将转而调用这个+方法:


注:(1).+(2L)与(1).+(2)这样的调用方式,第一个操作数必须用括号括起来,否则会当成Double类型在scala2.10.7中测试好像不用加括号了!!!!)。

符号+是操作符----更明确地说,是中缀操作符。操作符标注不仅限于像+这种其他语言里看上去像操作符的东西,任何方法都可以被当作操作符来标注
例如,类String有个带Char参数的方法 indexOf ,它搜索String里第一次出现的指定字符,就像这样:


另外,String还提供了重载的indexOf方法,带两个参数的,尽管这个indexOf方法带两个参数,你仍然可以用操作符标注的方式使用它。不过这样用的时候,这些参数必须放在括号内,如:

重点任何方法都可以是操作符
Scala里的操作符不是特殊的语法,任何方法都可以是操作符。到底是方法还是操作符取决于你如何使用它。如果写成s.indexOf(‘o’),indexOf就不是操作符。但如果写成s indexOf ‘o’,那么indexOf就是操作符,因为你以操作符标注方式使用它。

到目前为止,你已经看到了中缀操作符标注的例子,也就是说调用的方法位于对象和传递给方法的参数或若干参数之间,如:“7 + 2”。Scala还有另外两种操作符标注方式。分别是前缀标注后缀标注。前缀标注中,方法名被放在调用的对象之前,如:“-7”里的“-”。后缀标中,方法放在对象之后,如:“7 toLong”里的“toLong”(这里好像需要一个import语句,不写会有警告!)。
与中缀操作符---两个操作数,分别在操作符的左右两侧---相反,前缀后缀操作符都是一元(unary)的;它们仅有一个操作数。前缀方式中,操作数在操作符的右边。前缀操作符的例子有:-2.0、!found和-0xFF。这些前缀操作符与中缀操作符一致,是值类型对象调用方法的简写形式。然而这种情况下,方法的全名就是在操作符字符前加上前缀“unary_”。例如,
Scala会把表达式-2.0转换成方法调用“(2.0).Unary_-”。


注意:标识符中能作为前缀操作符用的只有 + ,- ,! ,~ 。因此,如果对类型定义了名为unary_!的方法,就可以对值或变量用!p这样的前缀操作符方式调用方法但是即使定义了名为unary_*的方法,也没有办法将其用成前缀操作符了,因为*不是四种可以当作前缀操作符用的标识符之一。你可以像平常那样调用它,如:p.unary_*,但如果尝试像*p这么调用,scala就会把它理解为*.p,这或许就不是你所期望的了。
后缀操作符是不用点或括号调用的不带任何参数的方法。在scala里,方法调用的空括号可以省略惯例是如果方法带有副作用就加上括号,如:println(),如果没有副作用就去掉括号,如:”aa”.toLowerCase方法。

例子里的方法没有带参数,因此还可以去掉点,采用后缀操作符标注方式:


注意用后缀操作符标注好像有警告,原因是需要一个导入语句,如下例:

柳哥
粉丝 206
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
加载中
请先登录后再评论。
scala 基本类型和操作

Scala基本类型 Scala中的基本数据类型如下图: (来源:Programming in scala) 从上表中可以看出,Scala的基本数据类型与Java中的基本数据类型是一一对应的,不同的是Scala的基本数据类型头...

osc_779ncf3o
2018/08/11
1
0
java学习笔记(基础篇)—变量与表达式

一:局部变量和实例变量 定义变量是指设定变量的数据类型和变量的名字,Java语言要求变量遵循先定义,再初始化,然后使用的规则。 作用域:指它的存在范围,只有在这个范围内,程序代码才能访...

osc_ai011l20
04/16
1
0
Scala语法介绍

Scala语法介绍 1、语法规则 1.会将方法体的最后一行代码,当作返回值返回。 2.scala每行后面不需要加“;”, 3.如果一行中需要多条语句,则需要用“;”隔开。 4.如果scala的方法体只有一行代...

星汉
2018/05/05
213
0
Java编程思想学习(三)----第三章:操作符

3.2使用Java操作符   操作符接受一个或多个参数,并生成一个新值。   操作符作用于操作数,生成一个新值。有些操作符可以改变操作数自身的值。几乎所以的操作符都只能操作“基本类型”。...

osc_s26r3w6g
2018/11/26
1
0
Scala学习笔记(6)-基本类型和操作

基本类型和操作与Java一样,下面这些特别的也是不常用的,完全可以照Java的风格来。 1.三引号("""),内部的原始字串可以包含无论何种任意字符,包括新行,引号和特殊字符 管道符号(|)放在...

山海经
2013/08/27
329
0

没有更多内容

加载失败,请刷新页面

加载更多

Quartz的Misfire处理规则 错过任务执行时间的处理机制

调度(scheduleJob)或恢复调度(resumeTrigger,resumeJob)后不同的misfire对应的处理规则 CronTrigger withMisfireHandlingInstructionDoNothing ——不触发立即执行 ——等待下次Cron触发频率...

独钓渔
今天
4
0
如何在Django视图中合并两个或多个查询集? - How to combine two or more querysets in a Django view?

问题: I am trying to build the search for a Django site I am building, and in that search, I am searching in 3 different models. 我正在尝试搜索要构建的Django网站,在该搜索中,我......

javail
今天
5
0
PHP解析/语法错误; 以及如何解决它们? - PHP parse/syntax errors; and how to solve them?

问题: Everyone runs into syntax errors. 每个人都遇到语法错误。 Even experienced programmers make typos. 即使是经验丰富的程序员也会打错字。 For newcomers, it's just part of the......

fyin1314
今天
20
0
OSChina 周三乱弹 —— 公主是大王的,命是自己的。小怪也要养家糊口啊!

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :郭燕的单曲《下半生》 最近听一些轻快的歌 #今日歌曲推荐# 《下半生》 - 郭燕 手机党少年们想听歌,请使劲儿戳(这里) @锦年 :...

小小编辑
今天
38
1
263. Ugly Number

题目: 263. Ugly Number 题目地址:https://leetcode.com/problems/ugly-number/ Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers......

JiaMing
今天
68
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部