"succ-6ren">
gpt4 book ai didi

scala - 带有隐式参数的泛型函数

转载 作者:行者123 更新时间:2023-12-01 07:36:38 25 4
gpt4 key购买 nike

我试图概括我用于从 Play 操作返回 Json 的函数之一。

我目前这样做:

def JsendOkObj(obj: JsValue) = Ok(Json.obj("status" -> "success", "data" -> obj))

并称之为:
JsendOkObj(Json.toJson(myObj))

我想做一些更像:
def JsendOkObj[A](obj: A) = Ok(Json.obj("status" -> "success", "data" -> Json.toJson(obj)))

然后像这样调用它:
JsendOkObj(myObj)

哪里 Json.toJsondefined作为:
def toJson[A](implicit arg0: Writes[A]): Enumeratee[A, JsValue]

我编译这个的错误是我需要为类型 A 定义一个 Writes| .这是不可能的,因为我不知道是哪种类型 A实际上最终会是:

No Json deserializer found for type A. Try to implement an implicit Writes or Format for this type.

最佳答案

您可以确保隐式 Writes[A]当您调用 toJSon 时将在范围内通过向您自己的方法添加隐式参数列表,如下所示:

def JsendOkObj[A](obj: A)(implicit w: Writes[A]) =
Ok(Json.obj("status" -> "success", "data" -> Json.toJson(obj)))

这相当于将类型类实例显式传递给 toJson :
def JsendOkObj[A](obj: A)(implicit w: Writes[A]) =
Ok(Json.obj("status" -> "success", "data" -> Json.toJson(obj)(w)))

请注意,您也可以使用 a context bound这里:
def JsendOkObj[A: Writes](obj: A) =
Ok(Json.obj("status" -> "success", "data" -> Json.toJson(obj)))

这只是我上面第一个版本的语法糖。

关于scala - 带有隐式参数的泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14581757/

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