2014-04-07 115 views
-1

我有以下几点:返回高阶函数的值不

def retSomething(x: Int): Int => Int = x*x 

assert(retSomething(5)(5) == 25) 
assert(retSomething(1)(1) == 1) 
assert(retSomething(1)(0) == 0) 

但断言失败。当然,这是正确的,但它说运行时缺少实现。

回答

5

我认为你正在寻找的实现是:

def retSomething(x: Int): Int => Int = y => x * y 

什么方法retSomething是什么意思?它需要一个Int并返回一个函数Int => Int。 函数Int => Int需要另一个Int并返回一个Int

所以我们想要返回一个功能,需要一个新的Int,这就是为什么我们需要:y => x * y

类型推断很好地工作在这里,你不需要写(但可以):(y: Int) => x * y

0

这个返回int而期待INT =>内部

def retSomething(x: Int): Int => Int = x*x 

应该

def retSomething(x: Int): Int => Int = x => x*x