меня this class в Scala:Почему здесь не выполняется вывод типа Scala?
object Util {
class Tapper[A](tapMe: A) {
def tap(f: A => Unit): A = {
f(tapMe)
tapMe
}
def tap(fs: (A => Unit)*): A = {
fs.foreach(_(tapMe))
tapMe
}
}
implicit def tapper[A](toTap: A): Tapper[A] = new Tapper(toTap)
}
Теперь
"aaa".tap(_.trim)
не компилируется, что дает ошибку
error: missing parameter type for expanded function ((x$1) => x$1.trim)
Почему не тип, выведенный в String
? Из ошибки кажется, что неявное преобразование действительно срабатывает (в противном случае ошибка будет по линиям «tap
не является членом класса String
»). И, похоже, преобразование должно быть в Tapper[String]
, что означает, что тип аргумента String => Unit
(или (String => Unit)*
).
Интересно, что если я прокомментирую либо из tap
определений, то он скомпилируется.
Отличная идея, спасибо! Я думал, что мне придется назвать их по-другому. –
Ты быстро становишься новым Даниэлем, Джейсоном! –
@oxbow Даже лучше, он часто цитирует спецификацию, что хорошо. –