Можете ли вы объяснить это на примере? Обнаружил это при изучении HOF в Scala - PullRequest
0 голосов
/ 09 ноября 2018

Это функция. Какие здесь аргументы? Это функция? а какой тип возврата?

def sum(f: Int => Int): (Int, Int) => Int = {  
  def sumf(a: Int, b: Int): Int = {...}  
  sumf  
} 

1 Ответ

0 голосов
/ 09 ноября 2018

Это функция , называемая sum. Она принимает в качестве параметра one функцию от Int до Int и возвращает функцию, которая при вызове с парой Int s возвращает другую Int.

Фактический результат зависит от реализации, но мы могли бы, например, определить его как:

def sum(f: Int => Int): (Int, Int) => Int = {  
  def sumf(a: Int, b: Int): Int = {
    f(a) + f(b)
  }  
  sumf  
}

Или просто:

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

В этом случае вы можете назвать это так, например:

def f(a: Int): Int = a * a
def g(a: Int, b: Int): Int = sum(f)(a, b)
val x: Int = g(3, 4) // x = 25
...