案例类不具有复制方法
问题描述:
我有一个案例类案例类不具有复制方法
case class Oauth2Request[A](
foo: String,
request: Request[A]
) extends WrappedRequest[A](request) {
def bar = foo
}
(这是play.api.mvc.WrappedRequest)与
val wrappedRequest = Oauth2Request("foo",otherRequest)
val publicApiRequest = wrappedRequest.copy(request=apiRequest)
后来实例
出来像这样在我的IDE
最终的结果看起来像与编译错误
not found: value request
为什么复制方法将看起来像WrappedRequest的构造函数的参数而不是复制方法我期望可以用来复制/更改原始对象的1个或多个字段?
答
正如您在docs中看到的那样WrappedRequest
是而不是个案类。但是它有一个复制方法,正如IDE向您展示的那样,但这些参数都不会被命名为request
。
由于该类的构造函数带有一个类型为Request
的参数,为什么不是new WrappedRequest(apiRequest)
?
虽然我创建的案例类扩展了WrappedRequest,但我期望我的抽象将具有副本。另一种方法,就像你说的那样,做Oauth2Request(“foobar”,apiRequest),但实际上有比我在这里展示的字段更多的字段,scala的方式是去简洁的路线(更少的代码)。你会知道为什么我的案例类(Oauth2Request)没有复制方法吗?我相信我已经阅读过所有的案例类都有一个复制方法 – irregular