应用程序不接受参数

Pat*_*rty 5 scala

对于那些在那里的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完全陌生,因此,任何技巧或线索都很棒。

谢谢

pam*_*amu 2

正如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)