相关疑难解决方法(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 - 如何执行"assertThrows"方法?

我昨天开始学习Scala,所以我对它很陌生.在学习新语言时,我喜欢做的一件事是尝试创建一个微TDD库.

这是我到目前为止所得到的:

def assert(condition: Boolean, message: String) {
  if(!condition){ throw new AssertionError(message) }
}

def assertThrows[E](f: => Unit) {
  try {
    f
  } catch {
    case e: E => { return }
    case _: Exception => { }
  }
  throw new AssertionError("Expected error of type " + classOf[E] )
}
Run Code Online (Sandbox Code Playgroud)

工作的代码assert很好,但我有两个问题assertThrows.

  • 似乎我不能E在最后一行使用.无论我做什么,我都会得到一个class type expected but E found error.
  • 如果我从最后一行删除E(throw new AssertionError("error expected")例如替换它),我得到这个:warning: abstract type E in type pattern is …

generics scala

6
推荐指数
1
解决办法
1227
查看次数

标签 统计

scala ×3

generics ×1

manifest ×1

type-erasure ×1