Каковы приложения / преимущества использования частично примененных функций в Scala? - PullRequest
2 голосов
/ 25 декабря 2010

Мы частично применили функции в Scala-

def sum(a:Int,b:Int,c:Int) = a+b+c

val partial1 = sum(1,_:Int,8)

Мне было интересно, каковы преимущества использования Частично примененных функций.Или это просто синтаксическое дополнение?

Ответы [ 3 ]

5 голосов
/ 25 декабря 2010

О частично примененной функции в целом в книге " Программирование на Scala, 2-е издание " упоминается:

Еще один способ думать об этом виде выражения, в котором подчеркивание используется для представления всего списка параметров, как способ преобразования def в значение функции .
Например, если у вас есть локальная функция, такая как sum(a: Int, b: Int, c: Int): Int, вы можете «обернуть» ее в значение функции, метод apply которой имеет тот же список параметров и типы результатов.

scala> def sum(a: Int, b: Int, c: Int) = a + b + c
sum: (a: Int,b: Int,c: Int)Int
scala> val a = sum _
a: (Int, Int, Int) => Int = <function3>

(Здесь a(1, 2, 3) - это краткая форма для:

scala> a.apply(1, 2, 3)
res12: Int = 6

)

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

2 голосов
/ 25 декабря 2010

Преимущество состоит в том, что sum(1,_,8) меньше для ввода и чтения, чем x => sum(1,x,8).

Вот и все.

1 голос
/ 27 декабря 2010

сумма (1, _, 8) меньше для ввода и чтения, чем x => сумма (1, x, 8)

Однако ни то, ни другое не является законным;Вы должны предоставить тип параметра.

...