gpt4 book ai didi

Scala 不适用于特征

转载 作者:行者123 更新时间:2023-12-04 07:32:42 26 4
gpt4 key购买 nike

如何在特征中使用 unapply?

import play.api.libs.json.Json

trait Json[T] {

implicit val jsonFormat = Json.format[T]

}

给出编译错误:
No unapply function found

我可以以某种方式强制编译器将 T 绑定(bind)到案例类,以便我可以使用 unapply 吗?

最佳答案

这是 Scala 的 extractors 的要求。存在。提取器是一种称为 unapply 的方法。通常在对象中定义(通常是相关类型的伴侣)。它用于将值解构为其组成部分。

这是一个例子(相当做作):

object Extractor1 {
def unapply(a: Any): Option[(String, Int)] =
Some(a.toString, a.toString.length)
}

object ExtractorUse {
import Extractor1._
def use {
"23 skeedo!" match {
case Extractor1(str, length) => printf("str=\"%s\"; length=%d%n", str, length)
}
}
}

正在使用:
scala> ExtractorUse.use
str="23 skeedo!"; length=10

如果提取器返回 None ,尝试它的匹配将失败。同样,如果结果的数量与 case 中提供的模式变量不一致。条款。

还有一个对应的提取序列, unapplySeq .有关详细信息,请参阅 Programming in Scala 链接

关于Scala 不适用于特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14458368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com