首页 > 解决方案 > Scala 2.12:无法在提取器对象中使用 unapply

问题描述

我正在关注docs.scala-lang.org上提供的 Scala Tour 。我被困在提取器对象教程中:https ://docs.scala-lang.org/tour/extractor-objects.html

这是我要编译的代码:

object IdGenerator {
  private val id: AtomicInteger = new AtomicInteger
  def apply(name: String): String = id.incrementAndGet + "--" + name
  def unapply(genID: String): Option[String] = {
    val idParts = genID.split("--")
    if (idParts.head.nonEmpty && idParts.tail.nonEmpty)
      Some(idParts(0))
    else
      None
  }
}

println(IdGenerator("ABC"))
println(IdGenerator("DEF"))
println(IdGenerator("XYZ"))

IdGenerator(idName) = IdGenerator("ABC")
println(idName)
println(IdGenerator.unapply(IdGenerator("ABC")))

这是错误:

D:\MyApps\ScalaPrac\helloworld\hello\src\main\scala\example\Hello.scala:68:5: value update is not a member of object example.IdGenerator
IdGenerator(idName) = IdGenerator("ABC")

它说value update 不是 object 的成员。当然不是。但我不是要它寻找update方法,而是要它寻找unapply

标签: scala

解决方案


IdGenerator(idName) = x看起来像一个作业,但它实际上是IdGenerator.update(idName, x). 这解释了您收到的错误消息。

您需要使用val关键字来提取idName

val IdGenerator(idName) = IdGenerator("ABC")

推荐阅读