• 函数与方法


    1.方法定义和调用

    object HelloWord {
      def main(args: Array[String]) {
        println("Returned Value : " + addInt(5, 7));  // addInt(5, 7)调用定义的addInt方法
      }
    
      def addInt(a: Int, b: Int): Int = {    // a: Int 数据类型    : Int类型
        var sum: Int = 0
        sum = a + b
        return sum
      }
    }
    
    结果
    Returned Value : 12
    

    2.传值调用

    先计算参数表达式的值,再应用到函数内部
    object HelloWord {
      def main(args: Array[String]) {
        delayed(time());
      }
    
      def time() = {
        println("获取时间,单位为纳秒")
        System.nanoTime
      }
    
      def delayed(t: Long) = {
        println("在 delayed 方法内")
        println("参数: " + t)
      }
    }
    
    结果
    获取时间,单位为纳秒
    在 delayed 方法内
    参数: 325499987637800
    

    3.传名调用

    将未计算的参数表达式直接应用到函数内部
    
    object HelloWord {
      def main(args: Array[String]) {
        delayed(time());
      }
    
      def time() = {
        println("获取时间,单位为纳秒")
        System.nanoTime
      }
    
      def delayed(t: => Long) = { // =>设置传名调用
        println("在 delayed 方法内")
        println("参数: " + t)
      }
    }
    
    结果
    在 delayed 方法内
    获取时间,单位为纳秒
    参数: 325578016530300
    

    4. 函数 - 可变参数

    object HelloWord {
      def main(args: Array[String]) {
        printStrings("Runoob", "Scala", "Python");
      }
    
      def printStrings(args: String*) = {   // * 设置可变参数(可重复的参数)
        var i: Int = 0;
        for (arg <- args) {
          println(s"Arg value[ + ${i} + ] =  + ${arg}");  // ${} 占位符 自动替换
          i = i + 1;
        }
      }
    }
    
    结果
    Arg value[0] = Runoob
    Arg value[1] = Scala
    Arg value[2] = Python
    

    5.闭包

    函数内引用函数外的变量
    
    object HelloWord {
      def main(args: Array[String]) {
        println("muliplier(1) value = " + multiplier(1))
        println("muliplier(2) value = " + multiplier(2))
      }
    
      var factor = 3
      val multiplier = (i: Int) => i * factor
    }
    
    结果
    muliplier(1) value = 3
    muliplier(2) value = 6
    

    6.偏应用函数

    偏应用函数是一种表达式,你不需要提供函数需要的所有参数,只需要提供部分,或不提供所需参数。
    
    import java.util.Date
    object HelloWord {
      def main(args: Array[String]) {
        val date = new Date
        val logWithDateBound = log(date, _: String)   // log函数需要两个参数, 这样定义就不要每次都带data这个参数
    
        logWithDateBound("message1")
        Thread.sleep(1000)
        logWithDateBound("message2")
        Thread.sleep(1000)
        logWithDateBound("message3")
      }
    
      def log(date: Date, message: String) = {
        println(date + "----" + message)
      }
    }
    
    结果
    Sat Jul 25 15:23:25 CST 2020----message1
    Sat Jul 25 15:23:25 CST 2020----message2
    Sat Jul 25 15:23:25 CST 2020----message3
    

    7.递归函数

    函数可以调用它本身。
    
    object HelloWord {
      def main(args: Array[String]) {
        for (i <- 1 to 10)
          println(i + " 的阶乘为: = " + factorial(i))
      }
    
      def factorial(n: BigInt): BigInt = {
        if (n <= 1)
          1
        else
          n * factorial(n - 1)
      }
    }
    
    结果
    1 的阶乘为: = 1
    2 的阶乘为: = 2
    3 的阶乘为: = 6
    4 的阶乘为: = 24
    5 的阶乘为: = 120
    6 的阶乘为: = 720
    7 的阶乘为: = 5040
    8 的阶乘为: = 40320
    9 的阶乘为: = 362880
    10 的阶乘为: = 3628800
    

    8.高阶函数

    高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果
    
    object HelloWord {
      def main(args: Array[String]) {
        println(apply(layout, 10))
    
      }
    
      // 函数 f 和 值 v 作为参数,而函数 f 又调用了参数 v    f: Int => String 传名调用
      def apply(f: Int => String, v: Int) = f(v)
    
      def layout[A](x: A) = "[" + x.toString() + "]"
    }
    
    结果
    [10]
    

    9.匿名函数

    object HelloWord {
      def main(args: Array[String]) {
        println("multiplier(1) value = " + multiplier(1))
        println("multiplier(2) value = " + multiplier(2))
      }
    
      var factor = 3
      val multiplier = (i: Int) => i * factor   // =>左边是参数列表,右边是函数体。
    }
    
    结果
    multiplier(1) value = 3
    multiplier(2) value = 6
    

      

     

  • 相关阅读:
    day4
    day3
    day2
    day1
    spring-boot-note
    spring-boot-cli
    jquery ajax rest invoke
    spring-boot
    docker mysql
    jpa OneToMany
  • 原文地址:https://www.cnblogs.com/yoyo1216/p/13377382.html
Copyright © 2020-2023  润新知