S
f - параметр метода, то есть он в контравариантной позиции
A => B - Параметр функции (A) тоже в контравариантной позиции
Таким образом
f: A => B
- тут A
в дважды контравариантной позиции, то есть в ковариантной позицииSize: a a a
S
f: A => B
- тут A
в дважды контравариантной позиции, то есть в ковариантной позицииS
χλ
S
IK
case class Sample[+A]() {
def method[B](f: A =>
B) = ???
}
val f: Nothing => Int = ???
Sample[Int]().method[Int](f)
χλ
???
– это способ не писать тело функции, дабы проверить type checking?IK
S
Int => Int
используется там, где ожидается Nothing => Int
- так можно из-за контравариантности. В вашем коде Nothing => Int
используется там, где ожидается Int => Int
- так нельзяIK
S
???
- метод, возвращающий Nothing
.Oℕ
f: Int => Int
f: PosInt => Int
f : A => B
вы не передали, она так же является функцией Nothing => B
, т.е. функцией с которой снимается необходимость обрабатывать что-либо, и нет никакого противоречия, в том чтобы передать её в метод, принимающий такой аргументχλ
Oℕ
Oℕ
Oℕ
GP
S
GP
S
S