gpt4 book ai didi

scala - 从 TypeTag 和方法中获取精确的返回类型

转载 作者:行者123 更新时间:2023-12-01 10:42:22 35 4
gpt4 key购买 nike

说我有

trait Foo[T] { def bar: Bar[T] }

并希望在调用 Foo[Int] 时获取 bar 的返回类型(即本例中的 Bar[Int])来自 Foo[Int] 的类型标签和名称 "bar"(我们可以假设没有重载,或者我们可以区分它们)。这可以用 scala-reflect 来完成吗?

最佳答案

这是否接近您想要的(使用 asSeenFrom)?

val tt = typeTag[Foo[Int]]

scala> tt.tpe
.members
.find(_.name.toString == "bar").get
.asMethod
.returnType
.asSeenFrom(tt.tpe, tt.tpe.typeSymbol)

res68: reflect.runtime.universe.Type = Bar[Int]

我当然已经把类型安全抛到了脑后。稍微好一点:

scala> tt.tpe
.members
.find(_.name.toString == "bar")
.filter(_.isMethod)
.map(_.asMethod.returnType.asSeenFrom(tt.tpe, tt.tpe.typeSymbol))

res74: Option[reflect.runtime.universe.Type] = Some(Bar[Int])

关于scala - 从 TypeTag 和方法中获取精确的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29256896/

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