Поведение в скалазе не понято

Вопрос от неофита ScalaZ здесь. Я не совсем понимаю, как:

1.some

или дизъюнкция, связанная:

"Success!".right 

Работа. Я не могу найти какие-либо неявные преобразования, которые позволят поведение выше. Я знаю, как их использовать, но я заинтересован в их реализации. Спасибо.

1 ответ

Решение

Класс, содержащий метод some является OptionIdOps

final class OptionIdOps[A](self: A) {
  def some: Option[A] = Some(self)
}

Если вы загляните внутрь определения, вы увидите дополнительные неявные для любого типа A в OptionIdOps внутри определения черты:

trait ToOptionIdOps {
  implicit def ToOptionIdOps[A](a: A) = new OptionIdOps(a)
}

Таким образом, де-факто компилятор делает:

val someOfInt = new OptionIdOps(1).some
Другие вопросы по тегам