相关疑难解决方法(0)

如何在Scala上绕过类型擦除?或者,为什么我不能获得我的集合的类型参数?

Scala生活中的一个可悲事实是,如果你实例化一个List [Int],你可以验证你的实例是一个List,你可以验证它的任何单个元素是一个Int,但不是它是一个List [ Int],可以很容易地验证:

scala> List(1,2,3) match {
     | case l : List[String] => println("A list of strings?!")
     | case _ => println("Ok")
     | }
warning: there were unchecked warnings; re-run with -unchecked for details
A list of strings?!
Run Code Online (Sandbox Code Playgroud)

-unchecked选项将责任直接归咎于类型擦除:

scala>  List(1,2,3) match {
     |  case l : List[String] => println("A list of strings?!")
     |  case _ => println("Ok")
     |  }
<console>:6: warning: non variable type-argument String in type pattern is unchecked since it is eliminated by erasure
        case l …
Run Code Online (Sandbox Code Playgroud)

scala type-erasure

366
推荐指数
7
解决办法
7万
查看次数

什么是Scala中的清单,什么时候需要它?

从Scala 2.7.2开始,有一些叫做ManifestJava类型擦除的解决方法.但是,如何Manifest确切地工作以及为什么/何时需要使用它?

Jorge Ortiz 的博客文章Manifests:Reified Types解释了其中的一些内容,但它没有解释如何将它与上下文界限一起使用.

那么ClassManifest,有什么区别Manifest

我有一些代码(一个更大的程序的一部分,不能轻易地包含在这里),它有关于类型擦除的一些警告; 我怀疑我可以通过使用清单解决这些问题,但我不确定如何解决.

scala manifest

130
推荐指数
3
解决办法
3万
查看次数

Scala(2.8)Manifest如何工作?

我有一些Scala代码可以大量使用泛型,我从文档中收集到,在参数化约束中使用清单可以帮助我解决类型擦除问题(例如,我想实例化泛型类型的新对象) ).只是,我想更多地了解这是如何工作的.它几乎感觉像某种哈希映射为每个调用站点获取一个条目......这里有人可以详细说明吗?

class Image[T <: Pixel[T] : Manifest](fun() => T, size: Array[Int], data: Array[T]) {
    def this(fun: () => T, size: Array[T]) {
        this(fun, size, new Array[T](size(0) * size(1));
    }
}
Run Code Online (Sandbox Code Playgroud)

这在我在网站上找到的任何文档中似乎都没有涉及,而在Google上我主要使用语法差别很大的旧文章,因为2.8似乎有很多变化,我我不确定那些仍然准确.

generics scala manifest

23
推荐指数
1
解决办法
9473
查看次数

标签 统计

scala ×3

manifest ×2

generics ×1

type-erasure ×1