2016-10-12 1 views
3

Когда я прочитал Mxnet исходный код, я был смущен в следующих утверждений:Как интерпретировать этот SCALA синтаксис "Class [_>: Float с Int с Double]"

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 
) 

Что это значит для «класса [_>: Float with Int с Double], Int] "? Я понимаю, что ключевое слово Скала «с» может быть использовано при объявлении класса, например

Class person with glass { 

означает, что класс «человек» имеет черту objdect «стекла».

Как интерпретировать использование «с» в приведенном выше коде?

ответ

2

Ключевое слово with используется для выражения intersection types.

Тип Float with Int with Double в основном подтипом Float и Int и Double. Конечно, вы не можете иметь фактическое значение этого типа, потому что Float, Int и Double - все выпускные классы. Здесь, в типе Map[Class[_ >: Float with Int with Double], Int], он используется для выражения того, что каждый ключ Map должен быть Class[T], где T должен быть супертипом Float with Int with Double. И эти супертипы - Float, Int и DoubleAnyVal и Any, если мы идем вверх по цепочке наследования).

+0

Так может и быть строкой, потому что String является подтипом Any? – Madoc

+0

Что такое строка? Здесь есть только объекты класса. –

+0

К сожалению, я имел в виду класс String. – Madoc

Смежные вопросы