zoukankan      html  css  js  c++  java
  • 【Scala】用实例弄清楚scala几种函数的定义和特点


    作为参数的函数

    scala> val a1 = Array(1,2,3,4)		//这是一个数组
    a1: Array[Int] = Array(1, 2, 3, 4)
    
    scala> val f1 = (x:Int) => x * 2	//这是一个函数,命名f1
    f1: Int => Int = <function1>
    
    scala> a1.map(f1)		//函数f1可以作为参数使用
    res6: Array[Int] = Array(2, 4, 6, 8)
    

    匿名函数

    scala> val a1 = Array(1,2,3,4)
    a1: Array[Int] = Array(1, 2, 3, 4)
    
    scala> a1.map((x:Int) => x * 2)		//不给其命名,直接使用称为匿名函数
    res7: Array[Int] = Array(2, 4, 6, 8)
    

    柯里化函数(currying)

    柯里化(Currying) 是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
    通俗且不严谨地来说,柯里化函数就是把一个函数的多参数列表拆分为多个单参数列表

    //按通常的方法以及调用是下面这样
    scala> def m1(x:Int,y:Int) = x+y
    m1: (x: Int, y: Int)Int
    
    scala> m1(2,3)
    res8: Int = 5
    
    //柯里化函数
    scala> def m2(x:Int)(y:Int) = x+y
    m2: (x: Int)(y: Int)Int
    
    scala> m2(2)(3)		//柯里化函数这样可以应对一些情况
    res10: Int = 5		//比如方法需要拿到两个参数但只拿到一个参数
    
    //实际上就是执行了两次函数调用
    scala> m2(2)_
    res11: Int => Int = <function1>	 //m2(2)_会返回一个函数
    
    //调用的时候这样用即可
    scala> res11(3)
    res12: Int = 5
    //可以多次调用,不是一次性的
    scala> res11(7)
    res13: Int = 9
    
    //柯里化函数的运行机制就像下面这样
    scala> def m3(x:Int) = (y:Int) => x+y
    m3: (x: Int)Int => Int
    
    scala> m3(2)
    res14: Int => Int = <function1>
    
    scala> res14(3)
    res15: Int = 5
    

    闭包函数

    闭包就是能够读取其他函数内部变量的函数,也可以认为是对自由变量的捕获

    scala> var y = 5	//定义一个变量
    y: Int = 5
    
    scala> def m1(x:Int) = x+y	//这里只给出了一个参数,但方法是x+y两个参数
    m1: (x: Int)Int
    
    scala> m1(2)	//可以看出这里直接捕获了y变量的值
    res16: Int = 7
    
    scala> var y = 2
    y: Int = 2
    
    scala> m1(2)	//但不会因为变量值的修改而更改
    res17: Int = 7
    
  • 相关阅读:
    2020软件工程第四次作业04
    2020软件工程作业02
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    2020软件工程作业00—问题清单
    2020软件工程作业03
    2020软件工程作业02
    2020软件工程作业01
    小小小-冲刺集合
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772398.html
Copyright © 2011-2022 走看看