加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 应用程序不带参数

发布时间:2020-12-16 18:34:42 所属栏目:安全 来源:网络整理
导读:对于那些 scala专家,我正在为我的大学课程编写代码,编译器抛出一个错误,我不知道如何解决. 以下代码应该只调用一个菜单选项: def menu(option: Int): Boolean = { actionMap.get(option) match { case Some(f) = f() case None = println("ERROR: Please en
对于那些 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完全不熟悉,任何提示或线索都会很棒.

谢谢

解决方法

由于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
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读