scala中缀与后缀

scala中缀与后缀


git地址
https://github.com/a18792721831/studyScala.git

1. 中缀

什么是中缀?
中缀就是形如 a + b的表达式
就是中缀表达式
中缀表达式两边是参数,中间是操作。
在编程语言中,基本类型支持所有的中缀表达式。
比如在Java中,可以写 1+2就是中缀表达。
当然,在Java中,除了基本类型,还有包装类型,得益于自动拆箱和自动装箱,包装类也可以写中缀表达式。
但是,作为普通的类就没有这样好的待遇了。

在scala中,因为在调用方法时,可以有限的省略点。
所以,scala可以实现普通类的中缀表达式。
举个例子:

class Middle(v: Int){
  val add = (x: Middle) => this.v + x.getV
}

我们创建了一个普通的Java类,有一个add函数。
同时有一个int的属性。
add函数有一参数,其类型是其本身,实现的操作是将调用本身的属性值与参数的属性值进行相加,然后返回。
在Java中,我们只能如下调用
对象.方法(参数)
不过,在scala中,可以用中缀表达式进行调用。
我们写这个类的伴生对象,然后在伴生对象中写main方法进行调用。

object Middle{

  def apply(x: Int) = new Middle(x)

  def main(args: Array[String]): Unit = {
    val xs = Middle(3)
    val xsw = Middle(4)
    println(xs add xsw)
    println(xs.add(xsw))
    println(Middle(8) add Middle(10))
    println(Middle(8).add(Middle(10)))
  }
}

在伴生类中,定义了apply方法,使得我们可以像调用无参方法一样得到类的对象。
然后我们可以用中缀表达式进行调用
其输出结果如下
在这里插入图片描述

2. 后缀

除了中缀表达式,还有后缀表达式
后缀表达式比较常见的写法形如取反等等
!true就是后缀表达式。
当然这个解释可能不太正确。
不过,在scala中后缀主要是表达一个方法调用的方式。
对于无参方法的调用,可以省略点
最终的结果就像shell命令一样。
对象 操作
举个例子
我们在1中的类中增加一个无参的方法

def getV = this.v

然后在伴生类中调用。

    println(Middle(19) getV)
    println(Middle(19).getV)

当然,要用后缀表达式进行调用无参方法,还需要导入一个scala实现的包
import scala.language.postfixOps
如果不导入这个包,编译会报错

Error:(19, 24) postfix operator getV needs to be enabled
by making the implicit value scala.language.postfixOps visible.
----
This can be achieved by adding the import clause 'import scala.language.postfixOps'
or by setting the compiler option -language:postfixOps.
See the Scaladoc for value scala.language.postfixOps for a discussion
why the feature needs to be explicitly enabled.
    println(Middle(19) getV)

其执行结果如下
在这里插入图片描述
在这里插入图片描述

发布了182 篇原创文章 · 获赞 88 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/a18792721831/article/details/104229259