用示例看会scala函数

1.函数定义

a指你定义的参数即4,b指你定义的参数即3;Int是a和b的参数类型,最后的Int指的是整个函数的类型

   def fun (a:Int,b:Int):Int ={
      if (a>b)a else b
      }
    println(fun(4,3))

2.递归函数

同时这也是个嵌套函数,里面夹杂着if和else的逻辑结构,控制台输出后不难看出他是一个依次递减并相加的关系。

def fun2(num: Int): Int = {
  if (num == 1)
    1
  else
    num + fun2(num - 1)
}

println(fun2(3))

3.break

def fun3(num: Int) = {
  import scala.util.control.Breaks
  //方式一
  val loop = new Breaks
  loop.breakable(
    for (i <- 1 to num) {
      if (i == 4)
        loop.break()
      println(i)
    }
  )
  //方式二
  Breaks.breakable(
    for (i<-1 to num){
      if (i==4)
        Breaks.break()
      println(i)
    }
  )
}
fun3(8)
//方式三
def fun4(num:Int):Unit = {
  import scala.util.control.Breaks._
  breakable(
    for (i<- 1 to num){
      if (i==4)
        break()
      println(i)
    }
  )
}
fun4(5)

4.参数默认值的方法

def fun5(a:Int=10,b:Int=20):Int={
  a+b
}
println(fun5())

5.参数长度可变

def fun6(s:String*)={
  println(s)
}
fun6("a","b","c")

6.匿名函数

def fun7=(a:Int,b:Int)=>{a+b}
println(fun7(2,3))
def fun8=(a:Int,b:Int,c:Int)=>{a+b+c}
println(fun8(1,2,3))

7.高阶函数

//高阶函数
//1.使用函数作为参数
def f(a:Int,b:Int):Int={
  a+b
}
def fun9(f:(Int,Int)=>Int)={
  val a =100
  val b =200
  val result:Int = f(a,b)
  println(result)
}
fun9(f)
//字符串类型
def f1(a:String,b:String):String={
  a+b
}
def fun10(f1:(String,String)=>String) = {
  val a ="asd"
  val b ="sdjk"
  val result1:String =f1(a,b)
  println(result1)
}
  fun10(f1)//或者fun10((a:String,b:String)=>a+b),要把上面定义的f1函数给注掉
//函数作为返回值
def fun11(s:String):(Int,Int)=>Int= {
  if (s.length > 5) {
    def fun12(a: Int, b: Int):Int = {
      a + b
    }
    fun12
  }else {
    def fun13(a:Int,b:Int):Int={
      a-b
    }
    fun13
  }
}
val result =fun11("hello world")(2,4)
println(result)
//函数作为参数。函数作为返回值
//num % 2 ==0 返回一个加法的函数 num % 3 =0返回一个减法
def fun14(a:Int,b:Int):(Int,Int)=>Int={
  val sum = a+b
  if (sum%2==0){
    (c:Int,d:Int)=>c+d
  }else if (sum%3==0){
    (c:Int,d:Int)=>c-d
  }else{
    (c:Int,d:Int)=>0
  }
}
println(fun14(2,4)(3,5))
//方式二
def fun15(num:Int):Int={
  num %2
}
def fun16(num:Int):Int={
  num % 3
}
def fun17(a:Int,f:(Int)=>Int):(Int,Int)=>Int={
  val value = f(a)
  if (value ==0 ){
    def fun18(num1:Int,num2:Int):Int={
      num1+num2
    }
    fun18
  }else{
    (num1:Int,num2:Int)=>0
  }
}
val result2 = fun17(3,fun15)(3,4)

//打印恭喜中奖300
def fun19(f:(Int,Int)=>Int):(String,String)=>String={
  var sum =f(100,200)
  def fun20(a:String,b:String):String={
    a+sum+b
  }
  fun20
}
var str =fun19((a,b)=>{a+b})("您中奖了","恭喜您")
println(str)

8.函数柯理化

def fun21(a:Int,b:Int)(c:Int,d:Int):Int={
  a+b+c+d
}
val result3 = fun21(3,4)(5,6)
println(result3)
//隐式转换数据类型
implicit def double2Int(a:Double):Int = a.toInt
var a:Int =3.5
println(a)

9.部分函数/偏函数

//部分函数、偏函数
def showMsg(title:String,content:String,height:Double)={
  println(title+" "+content+height+"m")
}
showMsg("警告","水位下超过警戒线",0.8)
showMsg("警告","水位下超过警戒线",0.9)
showMsg("警告","水位下超过警戒线",1.0)
val title:String = "警告"
def showAlert=showMsg(title,_:String,_:Double)
showAlert("水位线超过警戒线",2.0)

def showInfo(a:Int,b:Int)={
  println(a+b)
}
def result4 =showInfo(4,_:Int)
result4(3)

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

def funPartial2:PartialFunction[Any,Int]={
  case i:Int =>i
  case _=>0
}
println(funPartial2(1))

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值