scala - 如何解释此 Scala 语法 "Class[_ >: Float with Int with Double]"

标签 scala syntax keyword mxnet

当我阅读 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
  )

“Class[_ >: Float with Int with Double], Int]”是什么意思? 我知道可以在类声明期间使用 scala 关键字“with”,例如

Class person with glass { 

表示类“人”具有对象“玻璃”的特征。

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

最佳答案

with 关键字用于表示intersection types .

类型 Float with Int with Double 基本上是 FloatIntDouble 的子类型。当然,您不能拥有此类型的实际值,因为 FloatIntDouble 都是最终类。这里,在类型Map[Class[_ >: Float with Int with Double], Int]中,用来表示Map的每个键都必须是一个 Class[T],其中 T 必须是 Float with Int with Double 的父类(super class)型。这些父类(super class)型是 FloatIntDouble(以及 AnyValAny,如果我们走上继承链的更高层)。

关于scala - 如何解释此 Scala 语法 "Class[_ >: Float with Int with Double]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39995720/

相关文章:

types - F#等同于C#中的is关键字?

scala - 在 Scala 中获取子数组的正确方法是什么?

c# - 你应该调用 base.methodName 还是 this.methodName

linux - 为什么在 bash 脚本中查找匹配的 `"' 错误时会出现语法错误和意外的 EOF?

c# - 哪些命名约束适用于 C# 条件编译符号?

php - 带有位置下拉列表的搜索栏将两个结果相加 - PHP/mySQL

用GOOGLE搜索html源代码?

scala - 在解释器中蒸发 Predef.any2stringadd

Scala 2.8 正确处理 Boolean 和 java.lang.Boolean 吗?

java - Spark 使用 sc.textFile ("s3n ://. ..) 从 S3 读取文件