Неявное добавление методов объекта

#scala #object #implicit

#scala #объект #неявное

Вопрос:

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

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

Комментарии:

1. Пожалуйста, объясните лучше, чего вы хотите.

Ответ №1:

 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)
    }
}
  

Комментарии:

1. Я этого не понял… Это весь исходный файл? Нравится objB.scala? Или это часть какой-то реализации метода? Я попытался вставить только это в свой код, и это не сработало…

2. @EduardoBezerra Я обновил ответ для работы с 2.11.7, но в настоящее время я не использую Scala, поэтому любые предложения приветствуются.

Ответ №2:

Что вы подразумеваете под неявным добавлением методов? Отвечает ли этот code snipper на ваш вопрос:

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

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

Комментарии:

1. "Foo" это экземпляр класса, я имею в виду добавление методов в одноэлементный объект, что-то вроде Math.myMethod(1) . Это все то же самое?