Способ, которым компилятор знает, какую overload
вызвать при непосредственном вызове, - это знание типа аргумента, к которому он применяется. overload someInt
может относиться только к overload(x: Int)
, поэтому нет никакой двусмысленности.
Когда вы создаете функцию из нее, вы не указали аргумент (пока), поэтому компилятор не знает, какой тип вашей функции вы хотите, поэтому он не знает, какой overload
вы ссылаясь на.
Простой способ исправить это явным образом указать тип:
val f : Int => String = overload _
или
val f = (x : Int => overload x)
или
val f = overload (_ : Int)
(примечание: я еще не проверял их, но некоторые варианты должны работать)