scala中的函数 break 匿名函数

package nj

import java.lang

/**
  * @author WGY
  * 函数
  */
object FunctionDemo2 {
  def main(args: Array[String]): Unit = {
    //函数定义
    def fun(a: Int, b: Int): Int = if (a > b) a else b

    println("fun:" + fun(4, 2))

    //递归函数
    def fun1(a: Int): Int = {
      if (a == 1) 1
      else a + fun1(a - 1)
    }

    val result: Int = fun1(3)
    println("fun1:" + result)


    //break的使用
    def fun2(a: Int) = {
      import scala.util.control.Breaks
      val loop = new Breaks
      loop.breakable(
        for (i <- 1 to a) {
          if (i == 4) loop.break()
          println(i)
        }
      )

      //第二种方式
      Breaks.breakable(
        for (i <- 1 to a) {
          if (i == 4) Breaks.break()
          println(i)
        }
      )
    }

    fun2(8)


    //参数的默认值
    def fun3(a: Int = 10, b: Int = 20): Int = {
      a + b
    }

    println("fun3:" + fun3())
    println("fun3:" + fun3(a = 100))
    println("fun3:" + fun3(b = 100))
    println("fun3:" + fun3(a = 100, b = 100))


    //参数长度可变
    def fun4(s: String*) = {
      println("fun4:" + s)
      println("长度是:" + s.length)
      s.foreach(println) //第一种遍历方法
      for (i <- s) { //第二种遍历方法
        println(i)
      }
    }

    fun4("a", "b", "c")


    //匿名函数  下两者相同
    def fun5 = (a: Int, b: Int) => {
      a + b
    }

    def fun6: (Int, Int) => Int = (a: Int, b: Int) => {
      a + b
    }

    println("fun5:" + fun5(2, 3))
    println("fun6:" + fun6(3, 4))

    def fun7 = (a: Int, b: Int, c: Int) => {
      a + b + c
    }

    println(fun7(1, 2, 3))


    //高阶函数
    //1、使用函数作为参数
    //普通函数
    def fun8(a: Int, b: Int): Int = {
      a + b
    }

    //使用函数作为参数
    def fun9(f: (Int, Int) => Int) = {
      val a = 100
      val b = 50
      val result: Int = f(a, b)
      println("fun:" + result)
    }

    fun9(fun8)

    def fun10(a: Int, b: Int): Int = {
      a - b
    }

    fun9(fun10)


    def fun11(a: String, b: String): String = {
      a + b
    }

    def fun12(f: (String, String) => String) = {
      val a = "hello "
      val b = "world!"
      val c = f(a, b)
      println("fun12:" + c)
    }

    fun12(fun11)

    //函数作为返回值
    def fun13(s: String): (Int, Int) => Int = {
      if (s.length > 5) {
        def fun1(a: Int, b: Int): Int = {
          a + b
        }

        fun1
      } else {
        def fun2(a: Int, b: Int): Int = {
          a - b
        }

        fun2
      }
    }

    val result1 = fun13("hello")(4, 2)
    println("fun13:" + result1)


    //函数作为参数,函数作为返回值
    //a%2==0 返回一个加法的函数
    //a%2!=0 返回一个减法
    def fun14_1(a: Int): Int = {
      a % 2
    }

    def fun14(a: Int, f: (Int) => Int): (Int, Int) => Int = {
      val i = fun14_1(a)
      if (i == 0) {
        def funJia(a: Int, b: Int): Int = {
          a + b
        }

        funJia
      } else {
        def funJian(a: Int, b: Int): Int = {
          a - b
        }

        funJian
      }
    }

    println("fun14:" + fun14(4, fun14_1)(4, 2))
    println("fun14:" + fun14(3, fun14_1)(4, 2))


    //函数的克里化
    def fun15(a: Int, b: Int, c: Int, d: Int): Int = {
      a + b + c + d
    }

    val sum15 = fun15(1, 2, 3, 4)
    println("fun15:" + sum15)

    def fun15_1(a: Int, b: Int)(c: Int, d: Int): Int = {
      a + b + c + d
    }

    def fun15_2(a: Int)(b: Int)(c: Int)(d: Int): Int = {
      a + b + c + d
    }

    var sum15_1 = fun15_1(1, 2)(3, 4)
    var sum15_2 = fun15_2(1)(2)(3)(4)
    println("fun15_1:" + sum15_1, "fun15_2:" + sum15_2)

    //隐式参数
    implicit var tmp1: Int = 5

    def fun15_3(a: Int)(b: Int)(c: Int)(d: Int)(implicit e: Int): Int = {
      a + b + c + d
    }

    val i1 = fun15_3(1)(2)(3)(4)
    val i2 = fun15_3(1)(2)(3)(4)(5)
    val i3 = fun15_3(1)(2)(3)(4)(100)
    println("fun15_3:i1:  " + i1, "  fun15_3:i2:  " + i2, "  fun15_3:i3:  " + i3)
    //多个隐式函数
    implicit var tmp2: String = "fuck"

    def fun15_4(a: Int)(b: Int)(c: Int)(d: Int)(implicit e: Int, f: String): Int = {
      println(f)
      a + b + c + d
    }

    println("fun15_4:" + fun15_4(1)(2)(3)(4))


    //部分函数 偏函数
    def fun16(title: String, content: String) = {
      println(title + "  " + content)
    }

    def fun16_1(title: String, content: String, height: Double) = {
      println(title + "  " + content + ":" + height + "m")
    }

    fun16("警告", "水位超过警戒线!")
    val title: String = "警告"

    def fun17 = fun16(title, _: String)

    fun17("水位超过警戒线1米")

    def fun17_1 = fun16_1(title, _: String, _: Double)

    fun17_1("水位超过警戒线", 2.0)


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

    def fun18_1 = fun18(_: Int, _: Int)

    println("fun18_1:"+fun18_1(1,2))

    def fun19:PartialFunction[String,Int]={
      case "hello"=>1
      case "world"=>2
      case _=>3
    }
    val i = fun19("hello")
    println("fun19:"+i)

    def fun20:PartialFunction[Any,Int]={
      case i:Int=>i
      case _=>0
    }
    println("fun20:"+fun20("s")
    )


    var list = List("a",2,3,4.5)
    val ints:List[Int] = list.collect(fun20)
    ints.foreach(println)


  }
}

输出结果:

fun:4
fun1:6
1
2
3
1
2
3
fun3:30
fun3:120
fun3:110
fun3:200
fun4:WrappedArray(a, b, c)
长度是:3
a
b
c
a
b
c
fun5:5
fun6:7
6
fun:150
fun:50
fun12:hello world!
fun13:2
fun14:6
fun14:2
fun15:10
(fun15_1:10,fun15_2:10)
(fun15_3:i1:  10,  fun15_3:i2:  10,  fun15_3:i3:  10)
fuck
fun15_4:10
警告  水位超过警戒线!
警告  水位超过警戒线1米
警告  水位超过警戒线:2.0m
fun18_1:3
fun19:1
fun20:0
0
2
3
0

Process finished with exit code 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值