В моем коде есть псевдоним типа:
type Time = Double
И я часто и в тестах, и в приложениях передаю длинные значения функциям, которые используют этот тип. Например:
def at(time : Time) : T = {
// Do Something
}
at(System.currentTimeMillis)
Этот код работает нормально, если не выполняется в моих тестах, где я получаю следующую ошибку:
found : Long
required: com.github.oetzi.echo.Echo.Time
Note that implicit conversions are not applicable because they are ambiguous:
both method long2double in object Predef of type (x: Long)Double
and method longToDouble in trait NumericBaseMatchers of type (s: Long)Double
are possible conversion functions from Long to com.github.oetzi.echo.Echo.Time
После поиска NumericBaseMatchers
кажется, что это часть инфраструктуры тестирования Specs (мои тесты написаны в Specs 1). Я попытался запустить код, чтобы получить ошибку в интерпретаторе, и это было хорошо вне тестов.
Можно ли как-нибудь убрать неоднозначность, чтобы я мог передать Long в значения функции Double / Time? Почему спецификации пытаются создать свое собственное преобразование LongToDouble, когда Scala уже предоставляет это?