Поведение в скалазе не понято
Вопрос от неофита 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