Я написал этот примерПонимание неявный <: <параметр
class TestMatch[T](private val t: T){
def test()(implicit ev: T <:< Option[Int]) = println(ev(t).get)
}
и испытание для его
val tm = TestMatch(Some(10))
tm.test() //fine
val tm2 = TestMatch(10)
tm2.test() //compilation error
Вопрос заключается в том, кто создает implicit ev: T <:< Option[Int]
, когда я взываю test
метод? Я знаю, что нет. Может быть, компилятор знает о implicit <:<
и знает, что с ним делать.
Documenation из <:<
не совсем ясно
Чтобы ограничить любой абстрактный тип T, который находится в области видимости, в списке аргумента метода (а не только собственные параметры типа метода в) просто добавить неявный аргумент типа
T <:< U
, гдеU
- обязательная верхняя граница ; или для нижних границ, используйте:L <:< T
, гдеL
- это требуемая нижняя граница.
Означает ли это, что компилятор возьмет остальные на себя? Я просто добавляю implicit ev: T1 <:< T2
?
На основе последних вопросов, которые вы разместили у вас, кажется, есть некоторые вопиющие пробелы в своих знаниях о Scala. Я бы посоветовал вам прочитать хорошую книгу о языке Scala и программировании Scala. –