2013-08-30 5 views
0

В Scala, я мог бы генерировать каррированную функцию следующим образом:Порядка аргументов в карри Scala Функция

def multiply(m: Int)(n: Int): Int = (m + 1) * (n + 2) 

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

val timesTwo = multiply(1) _ 

Но каков синтаксис для замены второго аргумента, а не первого?

val timesThree = multiply _ (1) // Incorrect Syntax 

Что еще более важно, почему не прямая параллель с multiply(1) _?

ответ

7
val timesThree = multiply(_: Int)(1) 

или

val timesThree = (x: Int) => multiply(x)(1) 
+0

Мне нравится 'умножим (_: Int) (1)'. Благодаря! Но почему синтаксис не является более параллельным с 'multiply (1) _'? – theJollySin

+2

См. Раздел 6.7 справочника Scala (http://www.scala-lang.org/files/archive/nightly/pdfs/ScalaReference.pdf). _ В 'multiply (1) _' не является заполнителем для анонимных параметров функции, таких как' multiply (_: Int), а скорее специальный синтаксис для принудительного преобразования методов в функции («eta-expansion») , Что касается того, зачем нужны явные типы, я понятия не имею. – wingedsubmariner