Добавление методов объекта неявно - PullRequest
7 голосов
/ 16 октября 2011

Есть ли способ неявного добавления методов в объект scala?

Upd: Например, в нефильтрованной библиотеке scala есть одноэлементный объект Body, который содержит методы Body.string(req: HttpRequest) и Body.bytes(req: HttpRequest) для чтения тела из httpзапрос.Итак, я хочу прочитать тело в моих доменных объектах, как Body.cars(req:HttpRequest).

Ответы [ 2 ]

17 голосов
/ 16 октября 2011
import scala.language.implicitConversions

object ObjA

object ObjB {
  def x = 1
}

object Main {
    implicit def fromObjA(objA: ObjA.type) = ObjB

    def main(args: Array[String]): Unit = {
        println(ObjA.x)
    }
}
11 голосов
/ 16 октября 2011

Что вы подразумеваете под неявным добавлением методов ?Этот фрагмент кода отвечает на ваш вопрос:

implicit def toFunkyString(s: String) = new {
  def reverseUpper = s.reverse.toUpperCase
}

"Foo".reverseUpper  //yields 'OOF'
toFunkyString("Foo").reverseUpper  //explicit invocation
...