gpt4 book ai didi

scala - 如何在 Scala 中获取泛型函数的实际类型?

转载 作者:行者123 更新时间:2023-12-01 09:59:58 31 4
gpt4 key购买 nike

如何获得调用泛型函数的实际类型?

下面的例子应该打印给定函数的类型 f返回:

def find[A](f: Int => A): Unit = {
print("type returned by f:" + ???)
}

findfind(x => "abc") 调用我想得到“f:String 返回的类型”。如何在 Scala 2.11 中实现 ???

最佳答案

使用 TypeTag .当您需要隐式 TypeTag 时对于类型参数(或尝试为任何类型查找一个),编译器会自动生成一个并为您填写值。

import scala.reflect.runtime.universe.{typeOf, TypeTag}

def find[A: TypeTag](f: Int => A): Unit = {
println("type returned by f: " + typeOf[A])
}

scala> find(x => "abc")
type returned by f: String

scala> find(x => List("abc"))
type returned by f: List[String]

scala> find(x => List())
type returned by f: List[Nothing]

scala> find(x => Map(1 -> "a"))
type returned by f: scala.collection.immutable.Map[Int,String]

上面的定义等价于:
def find[A](f: Int => A)(implicit tt: TypeTag[A]): Unit = {
println("type returned by f: " + typeOf[A])
}

关于scala - 如何在 Scala 中获取泛型函数的实际类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32228620/

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