scala - 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
。
解决方案
IdGenerator(idName) = x
看起来像一个作业,但它实际上是IdGenerator.update(idName, x)
. 这解释了您收到的错误消息。
您需要使用val
关键字来提取idName
:
val IdGenerator(idName) = IdGenerator("ABC")
推荐阅读
- nativescript - RadDataForm 后退导航破坏 iOS 源绑定
- python-3.x - 找出Python中数据框中特定行的特定列中有多少值匹配
- java - 如何在 graphql-java-tools Resolver 中 @Autowire 一个 JPA 存储库
- java - Java:无限循环 hasNextInt()
- python - pd.read_sql 方法来计算大型 Access 数据库中的行数
- c++ - 为什么 .idl 文件中使用的 `cpp_quote` 和 `pragma midl_echo` 不向 C++/WinRT 项目中生成的标头输出任何内容?
- xamarin.forms - 跨平台 Xamarin 表单应用程序 - 未显示 Android 启动画面
- javascript - 打字稿更改对象属性值动态错误
- flutter - 如何在 Flutter 的 Column 中使用带有 ListView 的扩展磁贴
- java - ArrayList.removeAll(Collection<>) 是否关心重复项?