2017-04-13 95 views
0

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

instance.variablename符号用于参考场和实例方法由objectname.instancemethodname(parm..)调用。

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

举个例子:在Scala列出我所遇到以下符号:

l filter p

在这里,l是单实例的名称和p是争论。

此场景将返回满足谓词p的元素列表。

所以我的问题是那个notaion是什么,它是什么意思?

+2

一个应该如何阅读本无标点符号“段落”(如果你甚至可以把它叫做一个段落)?努力使其可读。 –

+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") 
+0

嗯...只是一个小细节 - 这是由Scala解析器照顾,而不是编译器。 –

+1

@SarveshKumarSingh解析器是编译器的一部分。 – puhlen