zoukankan      html  css  js  c++  java
  • 寒假学习记录第四天

    Scala方法与函数

    1. Scala方法的定义
    • 有参方法
    • 无参方法

     

    def fun (a: Int , b: Int ) : Unit = {

       println(a+b)

     }

    fun(1,1)

        

    def fun1 (a : Int , b : Int)= a+b

        println(fun1(1,2))  

    注意点:

    方法定义语法 def来定义

    l 可以定义传入的参数,要指定传入参数的类型

    l 方法可以写返回值的类型也可以不写,会自动推断,有时候不能省略,必须写,比如在递归方法中或者方法的返回值是函数类型的时候。

    l scala中方法有返回值时,可以写return,也可以不写return,会把方法中最后一行当做结果返回。当写return时,必须要写方法的返回值。

    如果返回值可以一行搞定,可以将{}省略不写

    传递给方法的参数可以在方法中使用,并且scala规定方法的传过来的参数为val的,不是var的。

    如果去掉方法体前面的等号,那么这个方法返回类型必定是Unit的。这种说法无论方法体里面什么逻辑都成立,scala可以把任意类型转换为Unit.假设,里面的逻辑最后返回了一个string,那么这个返回值会被转换成Unit,并且值会被丢弃。

    1. 递归方法

      /**

         * 递归方法

         * 5的阶乘

         */

        def fun2(num :Int) :Int= {

          if(num ==1)

            num

          else 

            num * fun2(num-1)

        }

        print(fun2(5))

    1. 参数有默认值的方法

    默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值

    如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称

       /**

         * 包含默认参数值的函数

         * 注意:

         * 1.默认值的函数中,如果传入的参数个数与函数定义相同,则传入的数值会覆盖默认值

         * 2.如果不想覆盖默认值,传入的参数个数小于定义的函数的参数,则需要指定参数名称

         */

        def fun3(a :Int = 10,b:Int) = {

          println(a+b)

        }

        fun3(b=2)

    1. 可变参数的方法

    l 多个参数用逗号分开

        /**

         * 可变参数个数的函数

         * 注意:多个参数逗号分开

         */

        def fun4(elements :Int*)={

          var sum = 0;

          for(elem <- elements){

            sum += elem

          }

          sum

        }

        println(fun4(1,2,3,4))

    1. 匿名函数
      1. 有参匿名函数
      2. 无参匿名函数
      3. 有返回值的匿名函数

    可以将匿名函数返回给val定义的值

    l 匿名函数不能显式声明函数的返回类型

        /**

         * 匿名函数

         * 1.有参数匿名函数

         * 2.无参数匿名函数

         * 3.有返回值的匿名函数

         * 注意:

         * 可以将匿名函数返回给定义的一个变量

         */

        //有参数匿名函数

        val value1 = (a : Int) => {

          println(a)

        }

        value1(1)

        //无参数匿名函数

        val value2 = ()=>{

          println("我爱尚学堂")

        }

        value2()

        //有返回值的匿名函数

        val value3 = (a:Int,b:Int) =>{

          a+b

        }

        println(value3(4,4)) 

    1. 嵌套方法

        /**

         * 嵌套方法

         * 例如:嵌套方法求5的阶乘

         */

        def fun5(num:Int)={

          def fun6(a:Int,b:Int):Int={

            if(a == 1){

              b

            }else{

              fun6(a-1,a*b)

            }

          }

          fun6(num,1)

        }

        println(fun5(5))

     

    1. 偏应用函数

    偏应用函数是一种表达式,不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。

        /**

         * 偏应用函数

         */

        def log(date :Date, s :String)= {

          println("date is "+ date +",log is "+ s)

        }

        

        val date = new Date()

        log(date ,"log1")

        log(date ,"log2")

        log(date ,"log3")

        

        //想要调用log,以上变化的是第二个参数,可以用偏应用函数处理

        val logWithDate = log(date,_:String)

        logWithDate("log11")

        logWithDate("log22")

        logWithDate("log33")

    1. 高阶函数

    函数的参数是函数,或者函数的返回类型是函数,或者函数的参数和函数的返回类型是函数的函数。

    l 函数的参数是函数

    l 函数的返回是函数

    l 函数的参数和函数的返回是函数

        /**

         * 高阶函数

         * 函数的参数是函数 或者函数的返回是函数 或者函数的参数和返回都是函数

         */

        

        //函数的参数是函数

        def hightFun(f : (Int,Int) =>Int, a:Int ) : Int = {

          f(a,100)

        }

        def f(v1 :Int,v2: Int):Int  = {

          v1+v2

        }

        

        println(hightFun(f, 1))

        

        //函数的返回是函数

        //12,3,4相加

        def hightFun2(a : Int,b:Int) : (Int,Int)=>Int = {

          def f2 (v1: Int,v2:Int) :Int = {

            v1+v2+a+b

          }

          f2

        }

        println(hightFun2(1,2)(3,4))

        

        //函数的参数是函数,函数的返回是函数

        def hightFun3(f : (Int ,Int) => Int) : (Int,Int) => Int = {

          f

        }

        println(hightFun3(f)(100,200))

        println(hightFun3((a,b) =>{a+b})(200,200))

        //以上这句话还可以写成这样

        //如果函数的参数在方法体中只使用了一次 那么可以写成_表示

        println(hightFun3(_+_)(200,200))

    1. 柯里化函数

    l 高阶函数的简化

       /**

         * 柯里化函数

         */

        def fun7(a :Int,b:Int)(c:Int,d:Int) = {

          a+b+c+d

        }

        println(fun7(1,2)(3,4))

  • 相关阅读:
    笔记-归并排序
    Repeated Substring Pattern
    Assign Cookies
    Number of Boomerangs
    Paint Fence
    Path Sum III
    Valid Word Square
    Sum of Two Integers
    Find All Numbers Disappeared in an Array
    First Unique Character in a String
  • 原文地址:https://www.cnblogs.com/xuange1/p/12257456.html
Copyright © 2011-2022 走看看