[英]Scala Function.tupled and Function.untupled equivalent for variable arity, or, calling variable arity function with tuple
[英]Raising Argonaut tuple arity to 23
我正在嘗試實現一個 arity 23 的 CodecJson。它看起來像這樣:
implicit def infoCodec: CodecJson[Info] = CodecJson(
(x: Info) => argonaut.Json(
"a" -> x.a,
"b" -> x.b,
"c" -> x.c,
...(a total of 23 fields)
),
cursor => for {
a <- cursor.get("a")
b <- cursor.get("b")
c <- cursor.get("c")
...(a total of 23 fields)
}
)
但是,我在所有字段上都遇到了類型錯誤,例如:
type mismatch;
Id|Json
"a" -> x.a,
如何將xa
轉換為 Json - 等等所有其他字段/類型?
謝謝!
編輯:Scala 函數的數量限制為 22。所以這可能只是您的問題。
您需要使用 Argonaut 提供的“方法”來構建 JSON: :=
和->:
。 例如:
case class MyCookie(name: String, value: String)
implicit def myCookieCodec = CodecJson((c: MyCookie) =>
("name" := c.name) ->:
("value" := c.value) ->:
jEmptyObject,
c => for {
name <- (c --\ "name").as[String]
value <- (c --\ "value").as[String]
} yield Cookie(name, value)
)
->:
意味着“前置”,這意味着您必須從右到左閱讀一連串->:
調用。 關於上面的例子:
jEmptyObject
) 開始("value" := c.value)
) 的鍵 "value"("name" := c.name)
) 的鍵 "name" :=
構造一個 JSON 鍵值對。
我認為您的解碼部分( CodecJson.apply()
的第二個參數)應該按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.