#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)
. Это все то же самое?