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) = ...