2015-03-22 3 views
0

У меня есть метод fun. Он принимает литерал функции как параметр и возвращает Int.Scala: Что не так с моим методом?

def fun(arg: (Int) => Int): Int = { 
    val ret = 5 * arg + 10 
    ret 
} 

Он представляет собой функцию f(x) = 5x+10, которая может принимать параметр в другой функции (Ig g(x) = x+1), так f(g(2)) = 5(2+1)+10 = 25

Но мой Scala код не компилируется. Почему?

+1

Какое сообщение об ошибке? – Bergi

+2

Вы не вызываете параметр функции, и вы также не передаете функцию. Обратите внимание, что 'f (g (2))' эквивалентно 'f (3)'. Вам нужен простой параметр «Int», а не функция. – Bergi

+0

О, конечно. Благодарю. – barbara

ответ

0

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

object FunctionCalc{ 
     def f(Input: Int => Int) : Int ={ 
     val temp = 10 

     (Input(5) + temp) // It takes functions as input which take input as Int and return Int. 
     } 

     def f(Input:Int) :Int ={ 
     Input + 4 //overloaded function 

     } 
     def g(arg : Int) :Int= { 
     arg+1 //adding 1 
     } 

     def h(arg:Int) : Int ={ 
     arg+3 //adding 3 
    } 
     def main(args: Array[String]) { 
     println(f(g(2))) 
     println(f(h(4))) 
     println(f(6)) 
     } 
    } 

Рассмотрим приведенный выше пример, мы передаем функции g и h в качестве входов в f().

0

Потому что вы используете в своем коде функцию «arg: Int => Int» как и аргумент.

"arg" - это функция, которую вы можете использовать так.

def g(x:Int) = x+1 
def f(arg:Int=>Int)(y:Int) = 5* arg(y) + 10 

scala> f(g)(2) 
res23: Int = 25 
Смежные вопросы