Расширить пользовательский тип более высокого типа

У меня есть пользовательский псевдоним для более высокого типа в scala:

type FutureOfLastError = Future[LastError]

У меня также есть значение этого типа:

val myFuture: FutureOfLastError = ...

Чтобы написать читаемый код, я хотел бы определить (например) такой метод, как

def mapToString = { ... }

который сопоставляет экземпляр FutureOfLastError с Future[String] и вызывает его как

myFuture mapToString

Как я могу это сделать? Это вообще возможно? Я уже пробовал инкапсуляцию в case-классе, всевозможные неявные преобразования, которые приходили мне в голову.

Моим любимым выбором был бы объект-компаньон в псевдониме типа, но я не смог заставить его работать, потому что не могу вызывать методы типаж Future (например, карту и т. д.) из объекта-компаньона.


person jens    schedule 04.03.2013    source источник


Ответы (1)


Вам не нужно на самом деле расширять класс, вы можете просто использовать неявный класс (который является просто синтаксическим сахаром для шаблона «обогатить мою библиотеку»). Что-то простое, как это, должно сделать это:

implicit class MyFutureOps( future: FutureOfLastError ) {
  def mapToString = future.map(_.toString)
}
person Régis Jean-Gilles    schedule 04.03.2013
comment
Здорово. Большое спасибо за ваш очень скорый ответ. Он работает идеально. Я просто до сих пор не знал о неявных классах (я всего лишь новичок в scala, как вы могли догадаться... ;-)) - person jens; 04.03.2013