Scala:为什么List [=> Int]没有工作?

时间:2013-01-01 04:46:17

标签: scala lazy-evaluation

我一直在努力学习scala的来龙去脉,最近我发现了一些我很好奇的事情。

据我所知,如果我想将一段有效延迟评估的代码传递给一个函数,(不进行现场评估)我可以输入:

def run(a: =>Int):Int = {...}

从这个意义上说,函数run接收一个尚未评估的代码块,它会对其进行求值并返回计算出的Int of。然后我尝试将这个想法扩展到List数据结构。打字:

def run(a: List[=>Int]) = {...} 

然而,这会返回错误。我想知道为什么这是不允许的。除了通过这种语法,我可以如何传递未评估的代码块列表?

2 个答案:

答案 0 :(得分:9)

=>Int是按名称参数的语法。 =>Int不是类型,因此不能用作List的参数。但是,()=>Int是一种类型。这是返回Int的nullary函数的类型。所以这有效:

def run(a: List[()=>Int]) = {...} 

答案 1 :(得分:5)