1

У меня есть определенный пользователем псевдоним для более высокого kinded типа в Скале:Расширение определяется пользователем выше kinded тип

type FutureOfLastError = Future[LastError] 

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

val myFuture: FutureOfLastError = ... 

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

def mapToString = { ... } 

, отображающая экземпляр FutureOfLastError на будущее [String] и вызова это как

myFuture mapToString 

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

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

ответ

1

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

implicit class MyFutureOps(future: FutureOfLastError) { 
    def mapToString = future.map(_.toString) 
} 
+0

Отлично. Большое вам спасибо за ваш очень скоро ответ. Он работает отлично. Я пока не знал о неявных классах (я просто начинающий scala-новичок, как вы могли догадаться ... ;-)) – jens

Смежные вопросы