я могу получить функцию из перегруженного метода в Scala? - PullRequest
7 голосов
/ 19 октября 2011

Допустим, у меня есть два метода с одинаковым именем и возвратом, но с разными параметрами:

def overload(x: Int) = x.toString
def overload(s: String) = s

Теперь я хочу преобразовать один из них в функцию. Если бы метод не был перегружен, я бы сделал это:

val f = overload _

Но поскольку это так, компилятор справедливо жалуется на неоднозначную ссылку. Есть ли способ сделать функцию одного или другого из методов перегрузки, кроме как переименовать один из них?

Спасибо!

John

1 Ответ

15 голосов
/ 19 октября 2011

Способ, которым компилятор знает, какую overload вызвать при непосредственном вызове, - это знание типа аргумента, к которому он применяется. overload someInt может относиться только к overload(x: Int), поэтому нет никакой двусмысленности.

Когда вы создаете функцию из нее, вы не указали аргумент (пока), поэтому компилятор не знает, какой тип вашей функции вы хотите, поэтому он не знает, какой overload вы ссылаясь на.

Простой способ исправить это явным образом указать тип:

val f : Int => String = overload _

или

val f = (x : Int => overload x)

или

val f = overload (_ : Int)

(примечание: я еще не проверял их, но некоторые варианты должны работать)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...