Scala面向对象编程

时间:2017-04-13 07:05:38

标签: scala list oop

在面向对象编程中,对象有自己的状态和行为。对象状态存储在实例变量中,我们使用可以使用objectname来引用它们。

instance.variablename表示法用于引用字段,实例方法由objectname.instancemethodname(parm..)调用。

但是在这里Scala还有其他符号。

作为一个例子:在Scala列表中,我遇到了以下符号:

l filter p

在这里,l是列表实例的名称,p是参数。

此方案将返回满足谓词p的元素列表。

所以我的问题是这个意思是什么,它意味着什么?

1 个答案:

答案 0 :(得分:2)

Scala编译器将l filter p重写为l.filter(p),因此它们在运行时被视为相同,但它们看起来与读者不同,因此是影响代码可读性的编程风格的选择。

Scala称这种调用方式为“infix notation”,它旨在支持方法作为+*等操作。在Java中,+之类的运算符由JVM提供,但是在Scala中,它们可以在类上定义,然后使用相同的语法调用,就好像运算符是由Java中的JVM定义的那样。

例如:

case class Foo( v:String ) {
    def +(o:Foo) = Foo(v + o.v)
}

Foo("a").+(Foo("b")) // equals Foo("ab")
Foo("a") + Foo("b") // equals Foo("ab")