object Main extends App {
def foo[A](somelist: List[A])(implicit m: Manifest[A]): String = somelist match {
case _ : List[Int] => "we have a list of int!"
case _ => "have no idea what this list is"
}
}
Main.foo(List[String]("somestring"))
结果:
res0: String = we have a list of int!
我确信Manifest
的全部目的是将信息传递给JVM
为什么这不起作用? (PS我知道TypeTag
是更新的方式我想用Manifest
来尝试。
感谢
答案 0 :(得分:1)
Manifest[A]
在模式匹配中的唯一用途是允许您与A
匹配:
somelist match {
case _: A => ...
case _ => ...
}
不反对任何你想要的类型。
答案 1 :(得分:1)
因为事实证明存在Predef
manifest
定义,因此您应该以下列方式将m
仅与此预先清单进行比较
object Main extends App {
println(Main.foo(List[String]("fkdjfkdj")))
def foo[A](somelist: List[A])(implicit m: Manifest[A]): String = {
if (m <:< manifest[String]) {
"its a string"
} else {
"its not a string"
}
}
}
正确产生:
“它是一个字符串”
和int
object Main extends App {
println(Main.foo(List[Int](1)))
def foo[A](somelist: List[A])(implicit m: Manifest[A]): String = {
if (m <:< manifest[String]) {
"its a string"
} else {
"its not a string"
}
}
}
its not a string