0

私は Scala の初心者で、関数をリストに追加したいと考えています。私は次のものを持っています:

  var l2: List[() => Unit] = List()
  def foo() {
    println("In foo")
  }

そして今、リストにメソッドを追加したいと思います。

() => println("x") :: l2

コンパイルはできますが、実行時に動作しません。

次の質問: 以下がコンパイルされないのはなぜですか?

l2 = foo :: l2

ありがとう。

4

2 に答える 2

0

まず、() => println("x") :: l2と解釈され() => (println("x") :: l2)ます。これは、引数を取らず、List[Any](型推論後) を返す関数です。

@dursun が述べているように、次のように記述します。

(() => println("x")) :: l2

さらに、l2 = foo :: l2関数値を適用するのではなく使用する場合 (基本的にはプログラマーを誤用から保護するため)、Scala は明示的に宣言することを望んでいるため、コンパイルしません。使用する:

foo _ :: l2
于 2013-06-06T22:03:16.407 に答える