gpt4 book ai didi

scala - 这是Scala中一种更高种类的类型吗?

转载 作者:行者123 更新时间:2023-12-04 13:24:12 25 4
gpt4 key购买 nike

具有以下定义

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

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

最佳答案

它不应该。

您可以用值和函数进行类比。您有不是函数的基本值,例如5"foo"。然后,您将获得简单函数,这些函数将简单值作为参数并返回简单值,例如+length。高阶函数是具有其他函数作为参数或结果的函数。例如takeWhilemapfoldLeft是高阶函数。

如果考虑类型,则有简单类型,它们是值的实际类型,例如IntString甚至Int => String和List [Double](现在我考虑每个值,无论是否简单,包括函数)。然后是参数类型,也可以称为类型构造函数(将它们称为类型函数会使类推更清晰)。 List(不实例化泛型参数)实际上不是值的类型,您不能将val声明为List类型,而必须将其声明为List[Something]。因此,可以将List视为给定简单类型(例如Int)返回另一个简单类型(List [Int])的函数。据说IntStringDouble和Int => String都具有*类型,而List则具有* -> *类型。诸如ListMap之类的参数类型类似于简单函数。

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

高阶类型在库中不太常见,您可以在集合库的详细信息中找到一些,例如GenericCompanion。您可以在scalaz中找到很多。

关于scala - 这是Scala中一种更高种类的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10499169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com