在Scala中有很多为了方便而创造的语法规则,使用这些语法规则可以创建更简洁的语法,使编程更加有效。今天我们来看两个常用的语法规则,即中缀表示法(infix syntax)和后缀表示法(suffix syntax)。
这两个语法规则都是针对方法(method)来说的,所以在开始,我们创建两个类,然后添加方法:
package com.doggie object Bartender { def main(args: Array[String]): Unit = { val gin: Liquor = new Liquor("Gin") val tonic: Liquor = new Liquor("Tonic") val mixed = gin.mix(tonic) println(mixed) } } class Liquor(name: String) { def mix(rho: Liquor): String = { this.name + " and " + rho.getName } def getName(): String = this.name }
注1:方法最后一条表达式的值即为返回值,Scala不建议使用return来显示表达
Bartender对象中的main方法负责创建两个Liquor类对象gin和tonic,然后调用gin的mix方法(使用tonic作为参数),最后打印混合后的名字。
编译运行这段代码,得到输出:
Gin and Tonic
package com.doggie object Bartender { def main(args: Array[String]) = { println(new Liquor("Gin") mix new Liquor("Tonic")) } } class Liquor(name: String) { def mix(rho: Liquor): String = { this.name + " and " + rho.getName } def getName() = this.name }
1.方法的参数只有1个(Arity-1)
2.调用时省略调用操作符和包围参数的括号
往深处想一想,以下这段代码等同于什么呢?
package com.doggie object Add { def main(args: Array[String]) = { println(1 + 2) } }
package com.doggie object Add { def main(args: Array[String]) = { println((1).+(2)) } }注2:我们给1加上括号的原因是防止Scala的编译器将1.推断成一个double型。
那么后缀表达式呢?与中缀表达式类似,后缀表达式适用于无参数的方法(Arity-0),下面是一个例子:
package com.doggie object Waiter{ def main(args: Array[String]) = { val whisky = new Liquor("Whisky") println(whisky.getName()) } } class Liquor(name: String) { def getName() = this.name }使用后缀表达式后,代码如下:
package com.doggie object Add { def main(args: Array[String]) = { println(new Liquor("Whisky") getName) } } class Liquor(name: String) { def getName() = this.name }注3:当一个方法的参数个数为0时,在方法声明时可以省略方法名称后的括号。如果声明时不省略括号,调用时允许以带括号或者省略括号的形式调用;如果声明时省略了括号,则调用时只允许不带括号的形式。
两段代码运行的输出完全一样:
Whisky
以上就是这两种特殊语法的用法,还等什么呢?快用到你的代码中去吧!
声明:本文为原创,禁止用于任何商业目的,转载请注明出处:http://blog.csdn.net/asongoficeandfire/article/details/21563731