случае?
https://scastie.scala-lang.org/Mikekeke/Zz2zEaupQuOkbm7NOaxfOQ
ты ему не предоставил (implicit f: ABC[T] => String)
нужно понять скоупы в которых должны быть зарезолвлены имплиситы. как только это поймешь - тогда вопросов по ним возникать не будет) все имплиситы должны быть зарезолвлены(определены - как хочешь назови) в точке вызова метода, который требует имплисит. def handleAbc3[T](x: ABC[T]) = { printAbc(x) // это равносильно тому, что ты ручками бы сам написал (впрочем и компилятор именно в это должен развернуть) printAbc(x)(resolvedImplicitCallOrValue) } теперь подумай, почему бы оно не скомпилировалось если бы ты ручками такую строчку написал. откуда бы взять этому значению resolvedImplicitCallOrValue - в твоем случае внутри метода Abc3 и наличия контекста Т - у тебя был бы только один вариант - прокинуть внутрь handleAbc3 это значение извне параметром(имплиситным или нет но потребовать извне). поэтому компилятор и не может найти имплисит в той точке. он не делает за тебя никакой магии, просто шугар и перебор в точках вместо тебя
Обсуждают сегодня