对于那些在那里的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
}
}
Run Code Online (Sandbox Code Playgroud)
编译器不喜欢这一行:
case Some(f) => f()
Run Code Online (Sandbox Code Playgroud)
更具体地说,它不喜欢
=> f()
Run Code Online (Sandbox Code Playgroud)
我对函数式编程和scala完全陌生,因此,任何技巧或线索都很棒。
谢谢
正如actionMap类型一样Map[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
}
}
Run Code Online (Sandbox Code Playgroud)
括号用于函数应用。因此仅当是函数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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4824 次 |
| 最近记录: |