在面向对象编程中,对象有自己的状态和行为。对象状态存储在实例变量中,我们使用可以使用objectname
来引用它们。
instance.variablename
表示法用于引用字段,实例方法由objectname.instancemethodname(parm..)
调用。
但是在这里Scala
还有其他符号。
作为一个例子:在Scala
列表中,我遇到了以下符号:
l filter p
在这里,l
是列表实例的名称,p
是参数。
此方案将返回满足谓词p
的元素列表。
所以我的问题是这个意思是什么,它意味着什么?
答案 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")