2013-11-23 3 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 
} 
Смежные вопросы