gpt4 book ai didi

scala - 在函数定义的 [ ] 括号中添加类型

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

欢迎大家,

我实际上是通过学习“Scala 中的函数式编程”一书来学习 Scala 的,在这本书中,作者通过在函数名称后的 [] 括号中添加类型来参数化函数,例如:

def sortList[A](xs: List[A]): List[A] = ...

这样做的原因是什么?编译器无法从参数中自行推断?或者我错过了什么?

最佳答案

在上面的特定实例中,A 是 sortList 函数将处理的类型。换句话说,它将获取一个包含 A 类型对象的 List 并对它们进行排序,返回一个包含 A 类型对象的新 List。

您可以按如下方式使用它:

val list = 10::30::List(20)
val sortedList = sortList(list)

scala 编译器会检测传入的 List 的类型是 Int 的列表,并理解声明中的“A”是传入的 List 的类型。

编译时必须知道类型,但是scala非常擅长推断类型,在上面的例子中,可以看到传入的列表的类型是一个Int的列表

需要注意的是,当 List 被创建为 List[Int] 类型时,该类型最初被推断出来,然后编译器也可以在稍后看到,当列表被传递给 sortList 函数时,List 的类型是传入 sortList 是 List[Int]

这里有一些额外的例子,我把它们放在一起来展示更多。如果您在 Scala 命令行中或使用 Scala Eclipse 工作表运行这些命令,您将看到发生了什么。这里唯一额外的一点是,它还表明您可以将类型应用于 sortList 而无需其他参数,以使其特定于 Ints 而不是适用于所有类型。
/* Declare a List[Int] and List[String] for use later */
val list = 10::30::List(20)
val stringList = "1"::"2"::List("3")

/* Doesn't actually sort - just returns xs */
def sortList[A](xs: List[A]): List[A] = xs

/* Sort both lists */
sortList(list)
sortList(stringList)

/* Create a version of sortListInt which just works on Ints */
def sortListInt = sortList[Int] _

/* Sort the List[Int] with the new function */
sortListInt(list)

/* fails to compile - sortListInt is a
version of sortList which is only applicable to Int */
sortListInt(stringList)

关于scala - 在函数定义的 [ ] 括号中添加类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28507947/

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