为什么可以';t我将一个trait传递给Scala函数并调用它:response[a:t](r:a)={r(value)}
我正在尝试实现一个通用的为什么可以';t我将一个trait传递给Scala函数并调用它:response[a:t](r:a)={r(value)},scala,higher-order-functions,traits,Scala,Higher Order Functions,Traits,我正在尝试实现一个通用的响应函数,该函数接受一个Int和一个对象,然后在提供的对象上调用apply(e:Int)(将返回一个新实例)。以下是我目前掌握的情况: trait GPResponse { abstract def apply(error: Int) } trait GPResponseMapping { def response[A: GPResponse](error: Int, instance: A) = { (resultCodeFor(error), ins
响应
函数,该函数接受一个Int
和一个对象,然后在提供的对象上调用apply(e:Int)
(将返回一个新实例)。以下是我目前掌握的情况:
trait GPResponse {
abstract def apply(error: Int)
}
trait GPResponseMapping {
def response[A: GPResponse](error: Int, instance: A) = { (resultCodeFor(error), instance(error)) } // Make a tuple of code and GPResponse instance
...
这将生成以下编译器错误:
[error] GPResponseMapping.scala:68: utility.GPResponse does not take type parameters
[error] def response[A: GPResponse](error: Int, instance: A) = { (resultCodeFor(error), instance(error)) }
[error] ^
[error] GPResponseMapping.scala:68: A does not take parameters
[error] def response[A: GPResponse](error: Int, instance: A) = { (resultCodeFor(error), instance(error)) }
[error] ^
我要做的是从错误代码和响应对象实例的组合中创建元组。响应对象将错误代码作为构造函数参数(apply()
argument),并返回一个实例。编写此命令时:
def response[A: GPResponse](error: Int, instance: A) = {
编译器将其扩展为:
def response[A](error: Int, instance: A)(implicit $ev0 GPResponse[A]) = {
但是,由于您这样定义了GPResponse
:
trait GPResponse {
它不接受类型参数,因此当您编写以下内容时,无法编写a:GPResponse
:
def response[A: GPResponse](error: Int, instance: A) = {
编译器将其扩展为:
def response[A](error: Int, instance: A)(implicit $ev0 GPResponse[A]) = {
但是,由于您这样定义了GPResponse
:
trait GPResponse {
它不接受类型参数,因此当您编写以下内容时,无法编写a:GPResponse
:
def response[A: GPResponse](error: Int, instance: A) = {
编译器将其扩展为:
def response[A](error: Int, instance: A)(implicit $ev0 GPResponse[A]) = {
但是,由于您这样定义了GPResponse
:
trait GPResponse {
它不接受类型参数,因此当您编写以下内容时,无法编写a:GPResponse
:
def response[A: GPResponse](error: Int, instance: A) = {
编译器将其扩展为:
def response[A](error: Int, instance: A)(implicit $ev0 GPResponse[A]) = {
但是,由于您这样定义了GPResponse
:
trait GPResponse {
它不接受类型参数,因此您无法编写
a:GPResponse
啊。。。好吧,算了。显然,我必须直接调用apply()
方法,就像在实例中一样。apply(…)
这有点令人吃惊,但它可以工作:
trait GPResponse {
abstract def apply(error: GPError): GPResponse
}
trait GPResponseMapping {
def response(error: Int, instance: GPResponse) = { (resultCodeFor(error), instance.apply(error)) }
...
如果有人能解释为什么我不能在本文中使用
instance(error)
,我将不胜感激。谢谢大家! 啊。。。好吧,算了。显然,我必须直接调用apply()
方法,就像在实例中一样。apply(…)
这有点令人吃惊,但它可以工作:
trait GPResponse {
abstract def apply(error: GPError): GPResponse
}
trait GPResponseMapping {
def response(error: Int, instance: GPResponse) = { (resultCodeFor(error), instance.apply(error)) }
...
如果有人能解释为什么我不能在本文中使用
instance(error)
,我将不胜感激。谢谢大家! 啊。。。好吧,算了。显然,我必须直接调用apply()
方法,就像在实例中一样。apply(…)
这有点令人吃惊,但它可以工作:
trait GPResponse {
abstract def apply(error: GPError): GPResponse
}
trait GPResponseMapping {
def response(error: Int, instance: GPResponse) = { (resultCodeFor(error), instance.apply(error)) }
...
如果有人能解释为什么我不能在本文中使用
instance(error)
,我将不胜感激。谢谢大家! 啊。。。好吧,算了。显然,我必须直接调用apply()
方法,就像在实例中一样。apply(…)
这有点令人吃惊,但它可以工作:
trait GPResponse {
abstract def apply(error: GPError): GPResponse
}
trait GPResponseMapping {
def response(error: Int, instance: GPResponse) = { (resultCodeFor(error), instance.apply(error)) }
...
如果有人能解释为什么我不能在本文中使用
instance(error)
,我将不胜感激。谢谢大家! 那么我想做的是不可能的吗?我开始的时候很简单:def-response(error:Int,instance:GPResponse)={(resultCodeFor(error),instance(GPError.errorForCode(error))}
,但这会导致apply():Unit
没有定义,我无法回避这个问题……那么我试图做的事情是不可能的吗?我开始的时候很简单:def-response(error:Int,instance:GPResponse)={(resultCodeFor(error),instance(GPError.errorForCode(error))}
,但这会导致apply():Unit
没有定义,我无法回避这个问题……那么我试图做的事情是不可能的吗?我开始的时候很简单:def-response(error:Int,instance:GPResponse)={(resultCodeFor(error),instance(GPError.errorForCode(error))}
,但这会导致apply():Unit
没有定义,我无法回避这个问题……那么我试图做的事情是不可能的吗?我一开始只是:def-response(error:Int,instance:GPResponse)={(resultCodeFor(error),instance(GPError.errorForCode(error))}
,但这会导致apply():Unit
没有定义,我无法回避这个问题……instance(error)
应该没问题——当你尝试这个的时候会出什么问题?原始问题中的错误是关于[A:GPResponse]
,而不是关于实例(错误)
实例(错误)
是一个编译时错误,但是调用实例。apply(错误)
工作正常。我试图用类型参数来解决这个问题。。。但是,instance.apply(error)
对我很有效。instance(error)
应该可以-当你尝试时,会出现什么问题?原始问题中的错误是关于[A:GPResponse]
,而不是关于实例(错误)
实例(错误)
是一个编译时错误,但是调用实例。apply(错误)
工作正常。我试图用类型参数来解决这个问题。。。但是,instance.apply(error)
对我很有效。instance(error)
应该可以-当你尝试时,会出现什么问题?原始问题中的错误是关于[A:GPResponse]
,而不是关于实例(错误)
实例(错误)
是一个编译时错误,但是调用实例。apply(错误)
工作正常。我试图用类型参数来解决这个问题。。。但是,instance.apply(error)
对我很有效。instance(error)
应该可以-当你尝试时,会出现什么问题?原始问题中的错误是关于[A:GPResponse]
,而不是关于实例(错误)
实例(错误)
是一个编译时错误,但是调用实例。apply(错误)
工作正常。我试图用类型参数来解决这个问题。。。但是instance.apply(error)
适合我。