E
Size: a a a
E
SK
SK
D
1.max , который берется из RichInt. Хочу уметь понимать, что max прилетел из RichIntAS
BA
View -> Show Implicit HintsАМ
BA
D
scala> implicitly[Int => { def min(i: Int): Any }]
^
error: No implicit view available from Int => AnyRef{def min(i: Int): Any}.
D
scala> reify(1.max(3))
val res15: reflect.runtime.universe.Expr[Int] = Expr[Int](Predef.intWrapper(1).max(3))
BA
S
scala> import reflect.runtime.universe._
import reflect.runtime.universe._
scala> show { reify { 1 max 2 } }
val res1: String = Expr[Int](Predef.intWrapper(1).max(2))
BA
implicitly[Int => { def min(i: Int): Any }] теперь implicitly[Int => AnyVal{ def min(i: Int): Int }]D
S
scala> Predef.intWrapper(1).max
override def max(that: Int): Int
D
BA
AnyVal` заменить на `Any`, результат не поменяется. Понять это можно так, когда пишешь: implicitly[Int => Any { def max(i: Int): Any }]Int и возвращает объект типа Any который имеет ф-цию max(принимает Int: возвращает Any). По сути мы не обязаны тут знать, что именно будет скрываться под Any, нам достаточно знать что есть функция max и что она принимает какой-то известный нам тип (Int). Нам вернется функция - по сути неявного преобразования. Вызвав эту функцию на любом значении Int, мы получим объект типа Any с функцией max, ну и вызвав .getClass у этого объекта получим конкретную реализацию из текущего скоупа неявных преобразований - RichInt. Как-то так:
scala> implicitly[Int => Any{ def min(i: Int): Any }]
val res26: Int => Any{def min(i: Int): Any} = $Lambda$1290/681463887@42dc92de
scala> res26(5)
val res27: Any{def min(i: Int): Any} = 5
scala> .getClass
val res28: Class[_] = class scala.runtime.RichIntD
СВ
,()[] - служебные символы, нельзя передавать в поле idД
