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

斯卡拉 – 模式匹配匿名

发布时间:2020-12-16 09:07:22 所属栏目:安全 来源:网络整理
导读:我正在尝试做类似的事情: private val isOne = (x: Int) = x == 1private val isTwo = (x: int) = x == 2def main(x: Int): String = { x match { case isOne = "it's one!" case isTwo = "it's two!" case _ = ":( It's not one or two" }} 不幸的是……看
我正在尝试做类似的事情:

private val isOne = (x: Int) => x == 1
private val isTwo = (x: int) => x == 2

def main(x: Int): String = {
  x match {
    case isOne => "it's one!"
    case isTwo => "it's two!"
    case _ => ":( It's not one or two"
  }
}

不幸的是……看起来我的语法不对,或者在Scala中这是不可能的……任何建议?

解决方法

由于两个原因,这不起作用.第一,

case isOne => ...

不是你想的那样.匹配中的isOne只是一个热切匹配任何东西的符号,而不是对val isOne的引用.您可以使用反引号来解决此问题.

case `isOne` => ...

但这仍然不会做你认为它做的事情. x是Int,isOne是Int =>布尔值,这意味着它们永远不会匹配.你可以像这样解决它:

def main(x: Int): String = {
  x match {
    case x if(isOne(x)) => "it's one!"
    case x if(isTwo(x)) => "it's two!"
    case _ => ":( It's not one or two"
  }
}

但这不是很有用,案例1 => ….工作做得很好.

(编辑:李大同)

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

    推荐文章
      热点阅读