scala函数

函数参数

1.可变参数(多个参数时,可变参数一般放置在最后)

def demo(name : String, girlFriend : String*) : Int = 1

2.参数默认值,一般有默认值的参数放在后面

def demo(name : String, girlFriendSize : Int = 5) : Int = 1

3.带名参数

def demo(name : String,age : Int) : Int = 1
demo(name = "cbd" , age = 18)

至简原则

1.return省略,函数体最后一行作为返回值

2.函数体只有一行代码,可以省略花括号

3.返回值类型如果能够推断出来,[:返回值]可以省略

    def gnmyd = {
      "给nm一刀"
    }

4.如果有return,则不能省略返回值类型

    def gnmyd = {
     //编译异常
      return "给nm一刀"
    }

5.如果函数明确声明Unit返回值,那即使函数使用return关键字也不起作用

6.Scala如果期望是无返回值类型,可以省略等号和[:返回值]

7.如果函数无参,但是声明了参数列表,那么调用时,小括号,可加可不加

8.如果函数没有参数列表,那么小括号可以省略,调用时小括号必须省略

9.如果不关心名称,只关心逻辑处理,那么函数名( def)可以省略

  def ex1(funcName:Int => Unit): Unit ={
    ex2(1)
  }
  def ex2(id:Int):Unit = {
      println("上去就是一刀")
  }

高阶函数

1.函数可作为值传递

    val ls:(Int, Int) => Int = abab
    val la = abab _

2.函数可以作为参数进行传递

    def 小野六花(xylh : (Int,Int) => Int): Unit ={
     
     }

注:定义一个函数,函数参数是一个函数签名

3.函数可以作为函数返回值返回

  def 小野六花() ={
    def 三上悠亚():Unit = {
      println("深田永美")
    }
  }
  小野六花()()

匿名函数

没有名字的函数就是匿名函数,形如(x:Int)=>{//do}

匿名函数至简原则
1)参数类型可以省略,会根据形参自动推导
2)类型省略后,如果只有一个参数,小括号可以省略
3)匿名函数只有一行,大括号也可以省略
4)如果参数只出现一次,则参数省略且后面参数可以用_代替

  def a(l:(Int,String)=>String): Unit ={
    println(l(1,"a"))
  }
  def b(l:Int=>Unit):Unit = {
    l(1)
  }
    this.a((_,_)=>{"aaa"})
    this.b(_=>println("bbb"))

函数柯里化(Haskell Curry)&闭包&惰性加载

1.闭包是函数式编程的标配
2.scala递归必须声明函数返回值类型
3.函数返回值被声明为lazy时,函数的执行将被推迟,知道我们首次对此取值,该函数才会执行
4.lazy不能修饰var

控制抽象

https://www.cnblogs.com/chorm590/p/scala_201904142108.html

你可能感兴趣的:(scala函数)