对于此案例类:
case class People(names: Set[Int])
特拉维斯·布朗(Travis Brown)解释了如何创建PeopleReads:Reads[People]
此答案:
implicit val PeopleReads =
(__ \ "names").read[Set[Id]].map(People)
但是,我正在尝试实现PeopleWrites: Writes[People]
:
implicit val PeopleWrites: Writes[People] =
(JsPath \ "names").write[Set[Int]].map(unlift(x => Some((x.names)))
出现以下编译时错误:
scala> People( Set(1,2,3))
res5: People = People(Set(1, 2, 3))
scala> implicit val PeopleWrites: Writes[People] =
(JsPath \ "names").write[Set[Int]].map(unlift(x => Some((x.names))))
<console>:21: error: value map is not a member of
play.api.libs.json.OWrites[Set[Int]]
implicit val PeopleWrites: Writes[People] =
(JsPath \ "names").write[Set[Int]].
map(unlift(x => Some((x.names)))
如何解决此错误?
另外,我怎么写我Format[People]
在哪里得到/定义了Reads
和Writes
:
val peopleFormat: Format[People] = ...
?
好问题!您不能使用的原因map
是因为Writes
它不是函子。
您可以将其Writes[A]
视为类似A => JsValue
。但是,假设我有一个A => JsValue
和一个A => B
。尝试想出一些方法来构成这些函数以获得一个B => JsValue
—这是不可能的。
Reads[A]
另一方面,有点像JsValue => A
,并且是一个函子-它具有一种map
方法,该方法采用a A => B
并将其与Reads[A]
/ 组成JsValue => A
并返回Reads[B]
/ JsValue => B
。
Writes
但是,它是一个 协变
函子,幸运的是Play知道这一点。当F
是逆函子时,F[A]
有一个方法contramap[B](f: B => A)
代替了通常的方法map[B](f: A => B)
。所以你可以这样写:
case class People(names: Set[Int])
import play.api.libs.json._
import play.api.libs.functional.syntax._
implicit val PeopleWrites: Writes[People] =
(__ \ 'names).write[Set[Int]].contramap(_.names)
这(__ \ 'names).write[Set[Int]]
是一个Writes[Set[Int]]
并且(_.names)
是一个函数People => Set[Int]
。与他们结合在一起contramap
给我们一个Writes[People]
。
本文向大家介绍Python中类的创建和实例化操作示例,包括了Python中类的创建和实例化操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python中类的创建和实例化操作。分享给大家供大家参考,具体如下: python中同样使用关键字class创建一个类,类名称第一个字母大写,可以带括号也可以不带括号; python中实例化类不需要使用关键字new(也没有这个关键字),类的实例化
虽然已经对类有了一点点模糊概念,但是,阅读前面一讲的内容的确感到累呀,都是文字,连代码都没有。 本讲就要简单多了,尝试走一个类的流程。 **说明:**关于类的这部分,我参考了《Learning Python》一书的讲解。 创建类 创建类的方法比较简单,如下: class Person: 注意,类的名称一般用大写字母开头,这是惯例。当然,如果故意不遵循此惯例,也未尝不可,但是,会给别人阅读乃至于自
我想让罗做出回应 我写了一个隐式的json格式 但对于第二行,我有三个错误 错误:(8,25)推断的类型参数[Seq[DAO.Category], Seq[DAO.Category]]不符合方法jsonFormat1的类型参数边界[P1, T 错误:(8,40)类型不匹配;找到:Seq[DAO.Category]= 错误:(8, 36) 找不到 spray.json.json.DefaultJso
本文向大家介绍JS创建对象的写法示例,包括了JS创建对象的写法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS创建对象的写法。分享给大家供大家参考,具体如下: 写法1: URL HASH: 我们通过绑定hashchange事件,当点击连接时可以实现使用ajax实现无刷新跳转。 更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaS
本文向大家介绍基于springboot2集成jpa,创建dao的案例,包括了基于springboot2集成jpa,创建dao的案例的使用技巧和注意事项,需要的朋友参考一下 springboot中集成jpa需要再pom文件中添加jpa的jar包,使用springboot的话iju不用自己规定版本号了,自动管理依赖版本即可。 然后我们再添加hibernate和oracle的jar包,同样自动管理版本。
问题内容: 什么使在类本身内部创建类的实例成为可能? 我知道这是有可能的,而且我自己也做过,但是我仍然不能使自己相信这不像是“谁先是鸡还是蛋?” 问题类型。我很高兴收到一个可以从编程角度以及从JVM /编译器角度阐明这一问题的答案。我认为理解这一点将帮助我清除OO编程中一些非常重要的瓶颈概念。 我已经收到了一些答案,但是还没有达到我期望的程度。 问题答案: 在类本身中创建类的实例绝对没有问题。在编