【问题标题】:Scala pattern matching syntaxScala 模式匹配语法
【发布时间】:2011-07-05 12:57:38
【问题描述】:

我最近一直在玩 scala 模式匹配,想知道是否有办法在 case 语句中创建提取器。以下代码有效,但您必须先定义提取器并将其分配给 val:

val Extr = "(.*)".r
"test" match {
  case Extr(str) => println(str)
}

我想做什么,或者我想让别人确认是不可能的,是这样的:

"test" match {
  case ("(.*)".r)(str) => println(str)
}

编辑:如果 scala 团队中的任何人正在阅读此内容:实现这个是否可行?

【问题讨论】:

  • +1 的建议!这在其他情况下确实很有用。
  • @JPP:确实。我最初想到的案例是 or 和 and 作为库函数,用于从简单的提取器构建复杂的提取器。

标签: scala syntax pattern-matching


【解决方案1】:

不幸的是,这是不可能的,我认为没有办法简化您的第一个示例。

case 语句后面必须跟一个模式。 Scala Language Specification 显示了第 8.1 节中模式的 BNF。模式的语法很强大,但实际上只是一个模式,不允许有任何方法调用或构造函数。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,我是这样解决的:

    case x if x.matches("regex") => foo(x)
    

    我不知道这是否正是你想要的,但它确实有效

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 2016-05-17
      • 2021-12-17
      • 2011-07-05
      相关资源
      最近更新 更多