在面向对象编程中,对象有自己的状态和行为。对象状态存储在实例变量中,我们可以使用objectname来引用它们。
instance.variablename符号用于引用字段,实例方法由objectname.instancemethodname(parm..)调用。
然而,在这里,Scala还有其他的符号。
例如:在Scala列表中,我遇到了以下表示法:
l filter p
在这里,l是list实例的名称,p是参数。
此场景将返回满足谓词p的元素列表。
所以我的问题是,这不是什么意思,它意味着什么?
发布于 2017-04-13 07:10:46
Scala编译器将l filter p重写为l.filter(p),因此它们在运行时得到相同的处理,但是在读者看来它们是不同的,因此是影响代码可读性的编程风格的选择。
Scala将这种类型的调用称为“不确定符号”,其目的是作为+和*等操作来支持方法。在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")https://stackoverflow.com/questions/43385647
复制相似问题