案例类不具有复制方法

问题描述:

我有一个案例类案例类不具有复制方法

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 autocompletion

最终的结果看起来像error与编译错误

not found: value request 

为什么复制方法将看起来像WrappedRequest的构造函数的参数而不是复制方法我期望可以用来复制/更改原始对象的1个或多个字段?

正如您在docs中看到的那样WrappedRequest而不是个案类。但是它有一个复制方法,正如IDE向您展示的那样,但这些参数都不会被命名为request

由于该类的构造函数带有一个类型为Request的参数,为什么不是new WrappedRequest(apiRequest)

+0

虽然我创建的案例类扩展了WrappedRequest,但我期望我的抽象将具有副本。另一种方法,就像你说的那样,做Oauth2Request(“foobar”,apiRequest),但实际上有比我在这里展示的字段更多的字段,scala的方式是去简洁的路线(更少的代码)。你会知道为什么我的案例类(Oauth2Request)没有复制方法吗?我相信我已经阅读过所有的案例类都有一个复制方法 – irregular