gpt4 book ai didi

scala - 结构子类型反射

转载 作者:行者123 更新时间:2023-12-02 23:02:49 27 4
gpt4 key购买 nike

我们可以使用函数f外部的反射来获取val s: String的类型吗?

val f = (r: {val s: String}) => {
}

最佳答案

scala> import scala.reflect.runtime.{universe => ru}
import scala.reflect.runtime.{universe=>ru}

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> def typeOf[T: ru.TypeTag](x: T) = ru.typeOf[T] // capture compile-time type info
typeOf: [T](x: T)(implicit evidence$1: reflect.runtime.universe.TypeTag[T])reflect.runtime.universe.Type

scala> val f = (r: {val s: String}) => {}
f: AnyRef{val s: String} => Unit = <function1>

scala> val tpe = typeOf(f)
tpe: reflect.runtime.universe.Type = scala.AnyRef{val s: String} => Unit

scala> ru.showRaw(tpe)
res0: String = TypeRef(ThisType(scala), scala.Function1, List(RefinedType(List(TypeRef(ThisType(scala), newTypeName("AnyRef"), List())), Scope(newTermName("s"))), TypeRef(ThisType(scala), scala.Unit, List())))

scala> val ru.TypeRef(_, _, refinement :: _) = tpe
refinement: reflect.runtime.universe.Type = scala.AnyRef{val s: String}

通过 Scala 反射,还可以生成结构类型的模拟,如下所示: https://gist.github.com/4008389 。链接的要点使用工具箱和运行时反射来完成此操作,但此场景看起来也可以使用宏来实现。

关于scala - 结构子类型反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13185405/

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