8

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

据我了解,如果我想将一个有效地延迟评估的代码块传递给一个函数,(而不是当场评估它)我可以输入:

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

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

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

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

4

2 回答 2

9

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

def run(a: List[()=>Int]) = {...} 
于 2013-01-01T05:09:09.347 回答