Вы можете добавить функции к существующему API в Scala, используя шаблон Pimp my Library .Вы делаете это путем определения неявной функции преобразования.Например, у меня есть класс Vector3
для представления трехмерных векторов:
class Vector3 (val x: Float, val y: Float, val z: Float)
Предположим, я хочу иметь возможность масштабировать вектор, написав что-то вроде: 2.5f * v
.Я не могу напрямую добавить *
метод к классу Float
курса, но я могу предоставить неявную функцию преобразования следующим образом:
implicit def scaleVector3WithFloat(f: Float) = new {
def *(v: Vector3) = new Vector3(f * v.x, f * v.y, f * v.z)
}
Обратите внимание, что это возвращает объект структурного типаnew { ... }
(), который содержит метод *
.
Я не проверял его, но, думаю, вы могли бы сделать что-то вроде этого:
implicit def argMaxImplicit[A](t: Traversable[A]) = new {
def argMax() = ...
}