2016-11-19 84 views
3

对于那些scala专家,我目前正在为我的大学课程编写代码,并且编译器已经抛出一个错误,我不知道如何解决。应用程序不参数

下面的代码应该简单地调用菜单选项:

def menu(option: Int): Boolean = { 
    actionMap.get(option) match { 
    case Some(f) => f() 
    case None => 
     println("ERROR: Please enter an option between 1-8") 
     true 
    } 
} 

编译器不喜欢这一行:

case Some(f) => f() 

,更具体地说,它不喜欢

=> f() 

我对函数式编程和Scala完全陌生,因此,任何提示或线索都会很棒。

由于

+0

请问你'actionMap'看起来像 – pamu

+1

什么是编译器错误?给我看你的动作图 – pamu

+0

'val actionMap = Map [Int,Boolean](1 - > handleOne,2 - > handleTwo,3 - > handleThree,4 - > handleFour,5 - > handleFive,6 - > handleSix,7 - > handleSeven ,8 - > handleEight)' –

回答

1

作为actionMapMap[Int, Boolean]类型。以下代码工作。

def menu(option: Int): Boolean = { 
    actionMap.get(option) match { 
    case Some(value) => value 
    case None => 
     println("ERROR: Please enter an option between 1-8") 
     true 
    } 
} 

括号是用于功能应用。所以f()只有在f是一个函数时才能使用。

actionMap.get(someIntValue)将返回布尔值的选项,您可以对提取布尔值的选项进行模式匹配。在你的代码片段中,你试图应用不允许的布尔值,因为它不是一个函数,而是一个值。

例如,如果你的ActionMap要成为像下面那么你前面的代码是有效的

val actionMap = Map(1 -> {() -> true}, 2 -> {() -> false}) 

def menu(option: Int): Boolean = { 
    actionMap.get(option) match { 
    case Some(f) => f() //now f() is valid. 
    case None => 
     println("ERROR: Please enter an option between 1-8") 
     true 
    } 
} 
+0

如此接近,它几乎奏效! –

+0

我得到了一个ClassNotFoundException。我有任何方法可以让我看看我的代码,而不会发布堆栈溢出。 –

+0

@PatrickLafferty你可以试试'pastebin' – pamu

相关问题