11.scala函数进阶

目录

  • 概述
  • 函数
    • scala函数和方法的区别
      • 第一种
      • 第二种
      • 方法转函数
    • 函数柯里化
  • 结束

概述

函数 vs 方法

  • 1.定义
    • 方法:def
    • 函数:=>
  • 2.方法本质上是一个特殊的函数
  • 3.函数是一等公民,函数可以当做值来传递,方法的参数,返回值

函数

scala函数和方法的区别

第一种

var/val 函数名称 = (参数列表) => {函数体}

object FunctionDemo {
  def main(args: Array[String]): Unit = {
    test01()
  }

  /**
   * 函数定义:第一种
   * var/val 函数名称 = (参数列表) => {函数体}
   */
  def test01() = {
    // f1:函数名称
    // (Int,Int) :参数列表
    // 返回值
    val f1 = (a: Int, b: Int) => {
      a + b
    }
    println(f1(4, 5))
  }
}

执行结果如下:
11.scala函数进阶_第1张图片

第二种

val/var 函数名称:(入参类型) => 返回值类型 =(入参的引用) => {函数体}

object FunctionDemo {
  def main(args: Array[String]): Unit = {
    test02()
  }

  /**
   * 函数的定义方式二
   * val/var 函数名称:(入参类型) => 返回值类型 =(入参的引用) => {函数体}
   */
  def test02(): Unit = {
    val f2: (Int, Int) => Int = (a: Int, b: Int) => {
      a + b
    }
    val f3: (Int, Int) => Int = (a, b) => {
      a + b
    }
    println(f2(3, 2))
  }
}

执行结果如下:
11.scala函数进阶_第2张图片

方法转函数

在Scala中,方法本身并不是值,而是函数。因此,一个方法不能直接赋值给一个val变量,但是可以将方法转换为函数并进行赋值。

object FunctionDemo {
  def main(args: Array[String]): Unit = {
    test03()
  }
    def test03(): Unit = {
    def sayHello(name: String): Unit = {
      println(s"Hell:$name")
    }

    // 将方法赋值给一个函数、变量:空格 下划线
    // 下划线 总结
    val sayHelloFunc = sayHello _

    sayHelloFunc("测试方法变函数")

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

    val add1 = add _
    println(add1(1, 2))

    val add2: (Int, Int) => Int = add
    // 将函数当方法的参数
    def foo(op:(Int,Int) => Int) = {
      op(10, 20)
    }
    println(foo(add2))

    def foo2(op:()=>Unit)={
      op()
    }

    def m =println("hello world")
    foo2(m _)
  }
}

执行结果:
11.scala函数进阶_第3张图片

函数柯里化

只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数

来看一下 js 中的柯里化与 scala 的实现区别。

// 非柯里化
function add(x, y) {
    return x + y;
}

add(1, 2) === 3; // true

// 柯里化
function addX(y) {
    return function(x) {
        return x + y;
    };
}

addX(2)(1) == 3; // true
object FunctionDemo {
  def main(args: Array[String]): Unit = {
    test05()
  }

  def test05(): Unit ={
    def isEq(x:String)(y:String)={
       x.toLowerCase == y.toLowerCase
    }
    println(isEq("A")("B"))
    println(isEq("A")("a"))
  }
}

执行结果如下:
11.scala函数进阶_第4张图片

结束

scala函数和方法的区别 至此结束,如有疑问,欢迎评论区留言。

你可能感兴趣的:(scala,scala,函数,方法,柯里化)