基本类型和操作之操作符和方法
博客专区 > 柳哥 的博客 > 博客详情
基本类型和操作之操作符和方法
柳哥 发表于4年前
基本类型和操作之操作符和方法
  • 发表于 4年前
  • 阅读 107
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购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方法。

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


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

标签: scala
共有 人打赏支持
粉丝 200
博文 394
码字总数 347782
×
柳哥
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: