2012-06-04 3 views
2

мне интересно, если можно использовать выделки на нескольких функций параметра-группы:Scala, Currying on multi parameter-group method?

scala> def sum(a: Int)(b: Int): Int = { a+b } 
sum: (a: Int)(b: Int)Int 

scala> sum(3)(4) 
res2: Int = 7 

scala> val partFunc = sum(3) _ 
partFunc: Int => Int = <function1> 

scala> partFunc(4) 
res3: Int = 7 

scala> val partFunc2 = sum _ _ 
<console>:1: error: ';' expected but '_' found. 
     val partFunc2 = sum _ _ 
          ^

scala> val partFunc2 = (sum _) _ 
<console>:8: error: _ must follow method; cannot follow Int => (Int => Int) 
     val partFunc2 = (sum _) _ 

ответ

2

Написание просто sum _ еще не имеет ничего общего с аргументами sum, но просто отличает fu nction objectsum от приложение функции.

Таким образом, вы можете написать:

scala> val partFunc2 = sum _ 
partFunc2: Int => (Int => Int) = <function1> 

Как вы можете видеть из информации о типе, это уже кэрри версия sum, которая принимает два Int параметры.

Конечно, вы можете продолжить, как и раньше, с partFunc2(4), имеющего тип Int => Int и так далее.

+0

Отлично! Спасибо за объяснение – iwalktheline

1

Вы можете сделать это следующим образом:

val partFunc2 = sum _ 

или как это:

val partFunc2 = sum(3) _ 
Смежные вопросы