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

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

发布时间:2020-12-16 18:36:12 所属栏目:安全 来源:网络整理
导读:欢迎大家, 我实际上是通过学习“Scala中的函数式编程”一书来学习scala,在本书中,作者通过在函数名称后面的[]括号中添加类型来参数化函数,如: def sortList[A](xs: List[A]): List[A] = ... 这样做的原因是什么?编译器不能从参数中自行推断它?或者我错过
欢迎大家,

我实际上是通过学习“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)

(编辑:李大同)

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

    推荐文章
      热点阅读