Scala Trait定义中 - =和+ =的含义

时间:2016-03-04 12:07:24

标签: scala traits

我正在从书中学习Scala Scala in Action,在本章中,作者正在解释Traits。该解释具有以下代码块,其中我无法在Updatable

的特征定义中弄清楚 - =和+ =的含义

请帮助!

package com.scalainaction.mongo
import com.mongodb.{DBCollection => MongoDBCollection }
import com.mongodb.DBObject

class DBCollection(override val underlying: MongoDBCollection)
extends ReadOnly
trait ReadOnly {
   val underlying: MongoDBCollection
   def name = underlying getName
   def fullName = underlying getFullName
   def find(doc: DBObject) = underlying find doc
   def findOne(doc: DBObject) = underlying findOne doc
   def findOne = underlying findOne
   def getCount(doc: DBObject) = underlying getCount doc
}
trait Updatable extends ReadOnly {
   def -=(doc: DBObject): Unit = underlying remove doc
   def +=(doc: DBObject): Unit = underlying save doc
}

1 个答案:

答案 0 :(得分:6)

它们只是方法的名称。 Scala中的方法名称等不限于像Java这样的其他语言中的字母,数字和下划线。因此,+=-=等名称是方法的完全可接受的名称。

请注意,在Scala中,方法和运算符之间没有区别。运算符只是方法。调用具有一个参数的方法有两种语法:" normal"语法使用圆括号和括号之间的参数,以及中缀语法。

val a = 3
val b = 2

// The infix syntax for calling the + method
val c = a + b

// Normal method call syntax for calling the + method
val d = a.+(b)

请注意,在您的示例中,使用了中缀语法来调用underlying上的方法。例如:underlying find docunderlying.find(doc)相同。