scala - 当一个 arg 预期时,零 arg 模式匹配

标签 scala pattern-matching

鉴于 Scala 中的这个定义:

class Foo(val n: Int)

object Foo {
  def unapply(foo: Foo): Option[Int] = Some(foo.n)
}

此表达式编译并返回 ok :
new Foo(1) match {
  case Foo() => "ok"
}
  • 为什么这甚至可以编译?我希望有 Option[T] 的提取器意味着只匹配一个参数的模式。
  • 图案是什么Foo()这里的意思?是否相当于Foo(_) ?

  • 换句话说,使经验行为成为可能的语言规则是什么。

    最佳答案

    the Scala Language Reference 的第 8.18 节讨论这种类型的模式匹配。根据引用资料,对于像 Foo() 这样的模式,它应该只匹配 unapply返回一个 bool 值。如 unapply返回 Option[T]对于某些不是元组的 T,则该模式必须仅包含一个参数,例如Foo(_) .除非我真的误解了这里发生的事情,否则看起来这是编译器违反规范的边缘情况。

    关于scala - 当一个 arg 预期时,零 arg 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459833/

    相关文章:

    scala - 在 Scala 中求和两个列表的最简单方法?

    multithreading - akka actor 之间的工作负载平衡

    r - 地址匹配的分层模糊匹配策略

    c# - 正则表达式根据匹配替换为单独的替换

    scala - 如何使用 Google Guice 的 @Inject 和 Scala/(Play 2.4.x)

    performance - Scala 的 .min 如何避免装箱和拆箱的惩罚?

    haskell - 模式匹配是多余的

    Haskell unicode 模式匹配

    scala - 如何递归解析这种树状结构?

    java - ASTM 协议(protocol)字符串的正则表达式