gpt4 book ai didi

Scala 的 "clean up"类型删除

转载 作者:行者123 更新时间:2023-12-01 11:44:10 25 4
gpt4 key购买 nike

我刚刚开始研究 Scala,并在 Wikipedia page on Scala 中发现了以下令人费解的引用:

[Scala] cleans up [...] poor design decisions in Java (e.g. type erasure...

我认为类型删除是 Java 虚拟机强加的限制,所以假设 JVM 执行 Scala 代码,这是如何“清理”的?

我非常感谢 Scala 的设计者也为 JVM 做出了贡献,所以我很想知道他/Scala 团队是否增强了 Scala 编译器以携带丰富的运行时类型信息,从而“清理”类型删除.是这样吗?

提前感谢您提供的任何见解。

最佳答案

遗憾的是,Scala 仍然需要在 JVM 运行时处理类型删除。然而,关于泛型的一些事情已经被清理干净:

  • 类型参数是非可选的(没有 List ,只有 List<String>/List[String] )
  • 协变/逆变的语言支持

进一步,应对JVM的局限性 TypeTags (在 2.9 Manifests 中)可用于存储类型信息,否则这些信息将在运行时丢失。例如:

import scala.reflect.runtime.universe._

def foo[T : TypeTag](x: List[T]) = {
println(implicitly[TypeTag[T]].tpe)
}

这会打印列表元素的类型。如果 - 例如 - 你传递了一个空列表,那么将无法恢复的东西:

foo(List.empty[String])
// not distinguishable without TypeTags from
foo(List.empty[Int])

关于Scala 的 "clean up"类型删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16973378/

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