2013-11-23 52 views
0

我需要幫助才能讓我的匿名函數在Scala中編譯。匿名函數的語法不正確

見下文:

private def mapBlock(helper: Helper): (Any) => Block = { 
    (original: Any) => { 
     val block = original.asInstanceOf[Block] 
     // logic with helper here 
     return block 
    } 
    } 

然而,當我編譯此,我得到「型塊的表達不符合預期」

什麼我錯在這裏做什麼?

回答

4

問題是您要求return block這是返回到mapBlock函數值block。但是您的mapBlock需要鍵入的功能(Any) => Block。要解決這個問題,只需刪除return並且有block

private def mapBlock(helper: Helper): (Any) => Block = { 
    (original: Any) => { 
    val block = original.asInstanceOf[Block] 
    // logic with helper here 
    block 
    } 
} 

如果你想有一個return那麼你可以命名你的函數並返回它。雖然在Scala中我們一般省略所有return s,所以這不會是慣用的Scala:

private def mapBlock(helper: Helper): (Any) => Block = { 
    val function = (original: Any) => { 
    val block = original.asInstanceOf[Block] 
    // logic with helper here 
    block 
    } 
    return function 
}