8

scala の内外を学ぶことに取り組んでいるのですが、最近気になるものに出会いました。

私が理解しているように、効果的に遅延評価されるコードのブロックを関数に渡したい場合は (その場で評価せずに)、次のように入力できます。

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

この意味で、関数 run は、まだ評価されていないコードのブロックを受け取り、それを評価して計算された Int を返します。次に、このアイデアを List データ構造に拡張しようとしました。タイピング:

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

ただし、これはエラーを返します。なぜこれが禁止されているのか疑問に思っていました。この構文以外に、未評価のコード ブロックのリストを渡すにはどうすればよいでしょうか?

4

2 に答える 2

9

=>Int名前によるパラメーターの構文です。=>Intは型ではないため、のパラメータとして使用することはできませんList。ただし、()=>Intタイプです。これは、を返すnullary関数のタイプですInt。したがって、これは機能します。

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