2015-10-25 29 views

回答

9

在斯卡拉=>是一种特殊的语法,您可以用它来指定方法的评估策略 - 它不是正确的类型,并且不能在方法应用程序的上下文之外使用。

定义不会立即全面评估值的一个常见的成语是使用() => A

def thunkInc(i: Int):() => Int =() => { println(i); i + 1 } 

不像=> Int,你需要“呼”形实转换来获取值:

scala> val ten = thunkInc(9) 
ten:() => Int = <function0> 

scala> ten 
res5:() => Int = <function0> 

scala> ten() 
9 
res6: Int = 10 

cats library还提供了一种Eval类型,它以更灵活的方式抽象评估策略。

-1

你可以完成它,示例代码;

scala> def funcReturn:() => Unit =() => {println("Returned Function")} 
funcReturn:() => Unit 

scala> val ret = funcReturn 
ret:() => Unit = <function0> 

scala> ret() 
Returned Function 
+2

'=> Unit'和'()=> Unit'不同类型 – Archeg

+0

肯定,但它是最接近你能解释一下什么样的运算要求,并请downvoter如何回答比@特拉维斯的不同? –

+1

我没有倒下,你的回答似乎有点误导,但总的来说对我来说还好,但我认为特拉维斯的答案被接受了,因为他指出了区别并解释了它。鉴于作者准确地询问了“=> T”,这对他来说可能是重要的,同样也是'=> T'和'()=> T'在用法上有所不同,这也由接受的答案来解释。 – Archeg

相关问题