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
AnyVa
l` заменить на `An
y`, результат не поменяется. Понять это можно так, когда пишешь: implicitly[Int => Any { def max(i: Int):
Any }
]In
t и возвращает объект типа An
y который имеет ф-цию max(принимает Int: возвращает An
y). По сути мы не обязаны тут знать, что именно будет скрываться под An
y, нам достаточно знать что есть функция ma
x и что она принимает какой-то известный нам тип (Int). Нам вернется функция - по сути неявного преобразования. Вызвав эту функцию на любом значении Int
, мы получим объект типа An
y с функцией ma
x, ну и вызвав .getClas
s у этого объекта получим конкретную реализацию из текущего скоупа неявных преобразований - RichIn
t. Как-то так:
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.RichInt
D
СВ
,()[] - служебные символы, нельзя передавать в поле id
Д