gpt4 book ai didi

scala - 如何在 Scala 中将泛型方法包装在泛型方法周围?

转载 作者:行者123 更新时间:2023-12-01 10:09:59 26 4
gpt4 key购买 nike

我正在尝试包装 spray-json 解析器,使其返回一个 Option 而不是抛出异常。

作为第一步,我只是尝试用我自己的方法包装该方法,但我在使其通用化时遇到了问题。

解析器使用隐式格式对象(这是为我正在使用的具体类型定义的)但是当方法是通用的时编译器会提示:

[error]     Cannot find JsonReader or JsonFormat type class for T
[error] def parse[T](s: String): T = JsonParser(s).convertTo[T]

相关代码如下:

case class Person(name: String)

object Protocols {
implicit val personFormat = jsonFormat1(Person)
}

import spray.json._

object Parser {
import com.rsslldnphy.json.Protocols._
// JsonParser(s).convertTo[Person] works fine, but..
def parse[T](s: String): T = JsonParser(s).convertTo[T] // .. doesn't
}

我需要做什么才能让它发挥作用?

最佳答案

您需要传递所需的隐式值,这可以使用“上下文绑定(bind)”快捷方式方便地完成:

def parse[T : JsonReader](s: String): T =
JsonParser(s).convertTo[T]

这相当于:

def parse[T](s: String)(implicit reader: JsonReader[T]): T =
JsonParser(s).convertTo[T]

参见 What is a "context bound" in Scala?

关于scala - 如何在 Scala 中将泛型方法包装在泛型方法周围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13326043/

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