Учитывая перегруженную функцию, причем одна принимает функцию как параметр. Этот параметр-функция не имеет аргументов:Scala: Перегруженная функция с функцией как параметр
def func(param:() => Unit): Unit = {
param()
}
def func(param: Int): Unit = {
println(param)
}
Призывая func
с анонимной функции идеально работает:
func(() => println("it works"))
Используя простую функцию не удается:
def functionAsParam(): Unit = {
println("it works")
}
func(functionAsParam)
Очевидно, что Scala оценивает functionAsParam
и не пропускать эту функцию до func
. Вопрос: Как я могу (как пользователь библиотеки, которая предоставляет func
s) передать не анонимную функцию?
Я думаю, что ваши слова не совсем правы в паранах. подчеркивание означает «превратить меня в функцию». Оба способа одинаковы. Не уверен, что кто-то будет использовать первый способ, но если они это сделают, они будут использовать parens при вызове для стиля. http://www.scala-lang.org/files/archive/spec/2.11/06-expressions.html#method-values –
спасибо за комментарии, на самом деле, кто-то, кто делает это первым способом, это я, потому что второй путь чувствует себя менее «интуитивным». – Ashalynd