【问题标题】:What does `var @ _*` signify in Scala`var @ _*` 在 Scala 中表示什么
【发布时间】:2013-10-10 21:21:38
【问题描述】:

我正在查看一些尝试学习该语言的 Scala 代码。遇到如下图:

 case x if x startsWith "+" => 
          val s: Seq[Char] = x
          s match {
            case Seq('+', rest @ _*) => r.subscribe(rest.toString){ m => }
          }

在这种情况下,rest @ _* 到底在做什么?我知道这是一个序列的pattern match,但我并不完全理解序列中的第二个参数应该做什么。

被要求提供更多上下文,所以我添加了我在其中找到的代码块。

【问题讨论】:

  • 请提供更多上下文。
  • 抱歉,我想我错了 - 不需要额外的上下文 :)
  • 另见value binding。您的案例实际上是 value bindingvarargs syntax sugar 的组合。

标签: scala


【解决方案1】:

如果您之前遇到过 _* 以将 Seq 作为可变参数应用于某些方法/构造函数的形式,例如:

val myList = List(args: _*)

然后这是“unapply”(更具体地说,搜索“unapplySeq”)版本:获取序列并转换回“varargs”,然后将结果分配给rest

【讨论】:

    【解决方案2】:

    x @ p 匹配模式p 并将整个匹配的结果绑定到x。此模式匹配包含 '+' 后跟任意数量 (*) 的未命名元素 (_) 的 Seq,并将 rest 绑定到这些元素的 Seq

    【讨论】:

    • * 是提取器的名称,还是语法?
    • 还有一些很棒的术语,我可以用谷歌搜索更多示例/解释。我尝试搜索“模式匹配”,但它没有进入提取器或类似的东西。
    • @randombits 我尝试在谷歌上搜索“scala pattern match unapplySeq”并想出了this link
    • @Owen,它是与可变参数相关的语法特征。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2013-06-28
    • 1970-01-01
    • 2017-03-27
    相关资源
    最近更新 更多