2016-10-12 15 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