200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > scala 高阶函数 闭包及柯里化

scala 高阶函数 闭包及柯里化

时间:2023-12-05 14:05:32

相关推荐

scala 高阶函数 闭包及柯里化

概念

一个函数的参数或返回值还是函数,这个函数就是高阶函数

用法

参数为函数

scala> val arr=Array(1,2,3)arr: Array[Int] = Array(1, 2, 3)scala> val fun=(x:Int)=>x*2fun: Int => Int = <function1>scala> arr.map(fun)res9: Array[Int] = Array(2, 4, 6)

参数为匿名函数

scala> arr.map(_*2)res11: Array[Int] = Array(2, 4, 6)

参数为方法

为什么参数可以是方法,应该是有某个隐式函数把方法转换为了函数

object _014 {def main(args: Array[String]): Unit = {val p=new Weather(Seq(1,2,3))println(p.transfer)//List(33.8, 35.6, 37.4)}}class Weather(temperture:Seq[Double]){//定义一个摄氏度转华氏度的方法def convertCtoF(temp:Double):Double=temp*1.8+32def transfer:Seq[Double]=temperture.map(convertCtoF)}

返回值为函数

object _015Test {def main(args: Array[String]): Unit = {println(getURL.toString())println(url)///users?id=1}//定义一个方法,运行结果是一个function//(String,String)=>String代表返回值类型,就是说冒号后面这个整体代表返回值类型def urlBuilder(ssl:Boolean,domainName:String):(String,String)=>String={val schema=if(ssl)"https://" else "http://"//定义一个函数,作为返回值,该函数有两个参数,类型为String,返回值类型也是STring(endpoint:String,query:String)=>s"$schema$domainName/$endpoint?$query"}val domainName=""val getURL=urlBuilder(ssl=true,domainName)val endpoint ="users"val query="id=1"val url=getURL(endpoint,query)}

闭包

1 是一个函数

2 返回值依赖于函数外部的一个或多个变量

object _016Test {def main(args: Array[String]): Unit = {println(multiplier(2))//6}var factor=3val multiplier: Int => Int = (i:Int)=>i*factor}

柯里化

指的是把多个参数的函数转化为一个参数的函数,预处理思想.

scala> def curriculum(x: Int)(y: Int)(z: Int): Int = x + y + zcurriculum: (x: Int)(y: Int)(z: Int)Intscala> curriculum(4)(2)(5)res13: Int = 11

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。