gpt4 book ai didi

scala - 如何从 Scala 中的特征访问类型成员

转载 作者:行者123 更新时间:2023-12-05 06:21:35 26 4
gpt4 key购买 nike

我正在尝试创建一个类型来捕捉一对相关类型的想法。

然后我想编写对捕获的类型进行参数化的函数。不幸的是,我无法正确表达类型并最终导致类型不匹配。

我非常喜欢使用类型参数并删除类型成员,但我不确定如何引用类型参数。

这是我的测试代码

class Types {

trait TypePair[A, B] {
type FROM = A
type TO = B
}

class Execute[TP <: TypePair[_, _]](func: TP#FROM => TP#TO) {

def execute(in: TP#FROM): TP#TO = func(in)

}

}

这是错误信息

Error:(12, 44) type mismatch;
found : in.type (with underlying type _$1)
required: _$1
def execute(in: TP#FROM): TP#TO = func(in)`

最佳答案

这应该足以满足您的第一个要求。

object Types {
sealed trait Request

object Request {
final case object ARequest extends Request
final case object BRequest extends Request
}

sealed trait Response

object Response {
final case object AResponse extends Response
final case object BResponse extends Response
}

trait TypePair[I <: Request, O <: Response]

object TypePair {
implicit final val ARequestAResponse: TypePair[Request.ARequest, Response.AResponse] =
new TypePair[Request.ARequest, Response.AResponse]

implicit final val BRequestAResponse: TypePair[Request.BRequest, Response.AResponse] =
new TypePair[Request.BRequest, Response.AResponse]

implicit final val BRequestBResponse: TypePair[Request.BRequest, Response.BResponse] =
new TypePair[Request.BRequest, Response.BResponse]
}

final class Execute[-I, +O](func: I => O)(implicit ev: TypePair[I, O]) {
def execute(in: I): O = func(in)
}
}

我不太明白你的第二个要求,所以我不确定这是否足以满足你的需求。如果没有,请随时留下您的反馈并使用更多信息编辑您的问题。或者,如果您觉得问题有很大不同,请打开一个新的。

关于scala - 如何从 Scala 中的特征访问类型成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59726045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com