2016-03-04 3 views
2

Я изучаю Scala из книги Scala in Action. В этой главе авторы объясняют «Черты». Объяснение имеет следующий кодовый блок, в котором я не могу понять значение - = и + = в определении определения UpdatableЗначение - = и + = в определении Scala Определение

Просьба помочь!

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 
} 

ответ

6

Это просто названия методов. Имена методов и т. Д. В Scala не ограничены буквами, цифрами и символами подчеркивания, как на других языках, таких как Java. Таким образом, имена, такие как += и -=, являются вполне приемлемыми именами для методов.

Обратите внимание, что в Scala нет разницы между методами и операторами. Операторы - это просто методы. Существует два синтаксиса для методов вызова, которые имеют один параметр: «нормальный» синтаксис с использованием точки и аргументов между круглыми скобками и синтаксисом инфикса.

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 doc - это то же самое, что и underlying.find(doc).

Смежные вопросы