Scala 如何检查可查看类型的值
我有这样的想法:Scala 如何检查可查看类型的值,scala,polymorphism,match,Scala,Polymorphism,Match,我有这样的想法: def my_check[T](arg: T) = arg match { case x: GenTraversable[_] = ... // XX case x: Array[_] ... 我想合并一些案例表达式: 在上面标有XX的代码中,我想检查一下arg我是否理解您的问题。此代码适用于我: class X[T] (name: T) class Y[T] (_name: T, age: Int) extends X[T](_name) def foo
def my_check[T](arg: T) = arg match {
case x: GenTraversable[_] = ... // XX
case x: Array[_]
...
我想合并一些案例
表达式:在上面标有XX的代码中,我想检查一下
arg我是否理解您的问题。此代码适用于我:
class X[T] (name: T)
class Y[T] (_name: T, age: Int) extends X[T](_name)
def foo[T](arg: T) = arg match {
case a: Y[_] => println("y " )
case a: X[_] => println("x " )
case _ => println("?")
}
val y = new Y("Olle", 3);
foo(y)
如果Y是X的一个子类(如本例中所示),那么必须从Y开始,并在以后使用更通用的类。请再次解释这个问题…?隐式解析(我很确定这是不可能的。模式匹配发生在运行时,隐式和非隐式之间的区别只存在于编译时。不,尝试用Y不扩展X,但隐式转换为X。我希望X和Y在相同的情况下,或者更一般的情况下,我可以检查参数类型是否为I've tried写入T
T <:< GenTraversable // error: not found: value T
class X[T] (name: T)
class Y[T] (_name: T, age: Int) extends X[T](_name)
def foo[T](arg: T) = arg match {
case a: Y[_] => println("y " )
case a: X[_] => println("x " )
case _ => println("?")
}
val y = new Y("Olle", 3);
foo(y)
def check[T <% GenTraversable[_](arg: T) = ...