scala – 在函数定义的[]括号中添加类型
欢迎大家,
我实际上是通过学习“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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |