如何检查清单(类型)是否是清单[Numberic [_]]的子类型?

时间:2013-08-09 12:44:19

标签: scala

首先,我知道清单已被弃用,最好使用TypeTag,但就目前而言,它不适合我,所以请考虑我的问题:

如何检查清单所代表的类型是否是清单[Numberic [_]]所代表的类型的子类型?

实际上,我有一个接收清单的功能,我想检查它是否是数字。

def isNumeric(m: Manifest[T]) : Boolean = m <:< manifest[Numeric[_]]

但是,它不起作用,例如输入清单[双]。

任何想法,如何让它发挥作用?

1 个答案:

答案 0 :(得分:2)

Numeric是一个类型类,它与子类型和Manifest(或TypeTag)没有任何关系。

Double不是Numeric。类型参数中的T : Numeric表示范围中存在类型Numeric[T]的隐式值。你无法通过反思来检查它。

也许你可以在macros中搜索隐含,但我不确定,我认为这不是你想要的。

所以答案是:你就是不能。

即使在理论上也是不可能的:在运行时没有关于隐式值的信息,并且在编译时没有Manifest[T]的实例。