gpt4 book ai didi

generics - 如何创建基于泛型类型返回对象的泛型 Scala 函数?

转载 作者:行者123 更新时间:2023-12-04 11:58:24 26 4
gpt4 key购买 nike

(Scala初学者问题)

我正在尝试在 Scala 中编写一个程序,该程序对 C++ 源文件进行大量检查,并且我想实现可选的检查日志记录。

以下适用于单次检查:

  val headerFiles = files.filter(_.matches(".*?\\.h$"))
val headerGuardChecker = if(options.contains('verbose)) {
new HeaderGuard with LoggingFileCheckerTrait
} else {
new HeaderGuard
}
headerFiles.foreach(h => if (! headerGuardChecker.check(new File(h))) println(h + " doesn't have a header guard"))

但是,当我尝试使用泛型对此进行概括时:
  def checker[T] = if(options.contains('verbose)) {
new T with LoggingFileCheckerTrait
} else {
new T
}
val headerFiles = files.filter(_.matches(".*?\\.h$"))
headerFiles.foreach(h => if (! checker[HeaderGuard].check(new File(h))) println(h + " doesn't have a header guard"))

我在两个新语句上遇到编译错误,声称 T 不是类型。我相信这是由类型删除引起的,但我还没有找到解决这个问题的方法。有没有办法做我想做的事?

最佳答案

看看 Scala 的“ list ”。它们通常允许您绕过 JVM 上的类型删除。

scala> def instantiate[T](implicit m:Manifest[T]) = m.erasure.newInstance().asInstanceOf[T]
instantiate: [T](implicit m: Manifest[T])T

scala> instantiate[String]
res0: String = ""

这是 manifests in Scala 的一个很好的介绍

关于generics - 如何创建基于泛型类型返回对象的泛型 Scala 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431526/

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