1

私はscalaの初心者です。

このコードが期待どおりに動作しない理由を理解したい

def invokeFunc( myFunc: () => String ){
    println(myFunc())
  }

  def callInvoker(){
     invokeFunc({ return "this is a string" })
  }

「callInvoker」を呼び出すと、何も得られません。「これは文字列です」の出力を期待していましたが、代わりに何も返されません。なんで?

4

1 に答える 1

4

これはreturn、無名関数からではなく、囲んでいるメソッドから返されるためです。したがって、実行するときは、( type のように破棄されるvalue を使用して)invokeFunc({ return "this is a string" })から効果的に返されます。callInvoker"this is a string"callInvokerUnit

修正されたコードは次のようになります。

def invokeFunc( myFunc: () => String ){
  println(myFunc())
}

def callInvoker(){
   invokeFunc{() => "this is a string" }
}

callInvoker()

これで、匿名関数が実際に戻ります(明示的に遭遇し"this is a string"ない限り、関数/メソッドは最後の式を返しますが、説明したように、囲んでいるメソッドに適用され、匿名関数には適用されません)。returnreturn

于 2013-02-28T10:37:32.697 に答える