Ответ заключается в том, что вам нужно всегда указывать универсальный тип с помощью foo[String]("hi")
. Поскольку универсальный тип U
не указан ни в одном из параметров, он не может быть выведен.
Нет никакого способа установить для стандартного параметра foo значение по умолчанию Any
, когда его нельзя вывести (что никогда не может быть выведено). Если вы переопределите функцию как
def foo[U](t:U)=t.asInstanceOf[U]
тогда следующий вызов не будет скомпилирован:
val s:Any="Hi"
foo[String](s)