应用程序不带参数

时间:2016-11-19 17:08:15

标签: 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
   }
}

编译器不喜欢这一行:

case Some(f) => f()

更具体地说它不喜欢

=> f()

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

由于

1 个答案:

答案 0 :(得分: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
   }
}

括号用于功能应用。因此,只有f()是函数时才应使用f

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

例如,如果你的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
   }
}