2016-10-12 30 views
3

当我读到Mxnet源代码,我在下面的语句很困惑:如何解释这个斯卡拉语法“类[_>:浮动与诠释双]”

object NDArray { 
    private val logger = LoggerFactory.getLogger(classOf[NDArray]) 
    private[mxnet] val DTYPE_NATIVE_TO_MX: Map[Class[_ >: Float with Int with Double], Int] = Map(
    classOf[Float] -> 0, 
    classOf[Double] -> 1, 
    classOf[Int] -> 4 
) 

是什么意思为“类[_>:用双精度浮点数],Int]“? 我理解的斯卡拉关键字“与”能类声明中使用,例如

Class person with glass { 

意味着类“人”有objdect“玻璃”的特征。

如何解释上述代码中'with'的用法?

回答

2

with关键字用于表示intersection types

Float with Int with Double类型基本上是FloatIntDouble的子类型。当然,你不能有这种类型的实际价值,因为Float,IntDouble都是最终的类。在这里,在Map[Class[_ >: Float with Int with Double], Int]类型中,它用于表示Map的每个密钥必须是Class[T],其中T必须是超类型Float with Int with Double。而那些超类型是Float,IntDouble(和AnyValAny,如果我们继续更高的继承链)。

+0

所以它也可以是一个字符串,因为字符串是Any的子类型? – Madoc

+0

什么可能是一个字符串?这里只有'Class'对象。 –

+0

对不起,我的意思是String类。 – Madoc