Я недавно обнаружил Scala, и я написал решатель RK4, который я пытаюсь обобщить как можно больше. После того, как он работал с произвольно большими системами, я хотел, чтобы он работал с произвольными числовыми типами данных, но я наткнулся на стену. Когда я использую общий тип данных, независимо от того, какие ограничения я на него накладываю, Scala автоматически конвертирует все в строки, чтобы использовать '+'.
Большая часть того, что я до сих пор пробовал, в конечном итоге писала одно и то же по-разному. Я мог бы явно преобразовать все в тип с наивысшей точностью, который я буду использовать (BigDecimal), и называть его днем, но это упускает большую часть смысла обобщать функцию.
Это не вся моя программа на RK4, но это один кусок кода, который я портил за последние пару часов:
def vecSum[T : Numeric]( u: Vector[T], v: Vector[T]): Vector[T] = (u, v).zipped.map(_ + _)
Это векторная сумма (математический вектор, структура данных просто случайная), которая принимает два вектора и возвращает один вектор, где каждый элемент является суммой двух соответствующих элементов во входных векторах.
Я пытаюсь заставить его возвращать вектор того же числового типа, что и входные данные, но он хочет только выплюнуть вектор строк.