相关疑难解决方法(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:什么是TypeTag以及如何使用它?

我所知道的TypeTags就是他们以某种方式取代了Manifest.互联网上的信息很少,并没有让我对这个主题有很好的认识.

所以,如果有人在TypeTag上分享了一些有用的资料,包括例子和流行的用例,我会很高兴.我们也欢迎详细的解答和解释.

types scala reification scala-2.10

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

编写一个通用的强制转换函数Scala

我试图实现编写一个方法,将Any的值转换为特定类型并返回选项而不是抛出像instanceOf这样的异常.Scala的行为与我的预期不符:

def cast[A](value: Any): Option[A] =
{
  try
  {
    Some(value.asInstanceOf[A])
  } catch
  {
    case e: Exception => None
  }
}
Run Code Online (Sandbox Code Playgroud)

考试:

val stringOption: Option[String] = cast[String](2)
stringOption must beNone
Run Code Online (Sandbox Code Playgroud)

失败并出现错误

java.lang.Exception: 'Some(2)' is not None
Run Code Online (Sandbox Code Playgroud)

有人知道为什么?

generics scala

17
推荐指数
2
解决办法
5050
查看次数

标签 统计

scala ×3

generics ×1

reification ×1

scala-2.10 ×1

type-erasure ×1

types ×1