加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

这是Scala中更高级的类型吗?

发布时间:2020-12-16 19:12:41 所属栏目:安全 来源:网络整理
导读:有以下定义 type MyMap = Map[String,List[Map[Int,String]]] Map可以定义为更高的kinded类型吗? 解决方法 它不应该. 您可以对值和函数进行类比.您有基本值,这些值不是函数,例如5和“foo”.然后你有简单的函数,它将简单的值作为参数并返回简单的值,例如或长
有以下定义

type MyMap = Map[String,List[Map[Int,String]]]

Map可以定义为更高的kinded类型吗?

解决方法

它不应该.

您可以对值和函数进行类比.您有基本值,这些值不是函数,例如5和“foo”.然后你有简单的函数,它将简单的值作为参数并返回简单的值,例如或长度.高阶函数是具有其他函数作为参数或结果的函数.例如,takeWhile,map或foldLeft是高阶函数.

如果考虑类型,则有简单类型,即实际类型的值,例如Int,String,甚至Int =>字符串和列表[双](现在我考虑每个值,简单或不简单,包括函数).然后有参数类型,也可以称为类型构造函数(调用它们类型函数会使类比更清晰). List(没有instanciating泛型参数)实际上不是值的类型,你不能声明val只是List类型,它必须是List [Something].所以List可以被认为是一个函数,给定一个简单类型(比如Int)返回另一个简单类型(List [Int]). Int,String和Double以及Int =>据说字符串有种类*,而List有种类* – > *.参数类型(如List或Map)类似于简单函数.

正如高阶函数是具有函数(而不是简单值)参数的函数一样,高阶类型(或有时更高的kinded)是具有类型构造函数参数的类型,而不仅仅是简单类型参数.它有种类(* – > *) – > *,或更复杂的东西.它们使用HigherOrder [C [_]]或HigherOrder [C [X]]声明,以告诉类型参数C本身是参数类型或类型构造函数.请注意,这必须出现在类型声明中,而不是类型实例化. List被声明为trait List [A],因此它是参数化的,但不是更高阶.如果您使用List [Seq [Map [Int,Set [Double]]]实例化,那么List的顺序不会更高.更高阶的类型将接受List(而不是List [Int])作为其参数,可以声明val x:HigherOrder [List] = ….

高阶类型在库中并不常见,你可以在集合库的血腥细节中找到一些,例如GenericCompanion.你可以在scalaz中找到很多它们.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读