Scala函数(一)

本文深入探讨Scala编程中的函数概念,包括函数的定义与调用、匿名函数、函数作为参数传递和返回值。通过示例展示了如何定义函数、使用命名参数、传递及返回函数,以及在特定场景下根据条件返回不同功能的函数。同时,还讨论了将函数作为参数和返回值在实际问题中的应用,例如根据输入数值决定加减操作并输出相应提示。
摘要由CSDN通过智能技术生成

一、Scala函数

函数是Scala的核心

  • 函数定义
//省略返回值则成为过程
def 函数名([参数列表]):[返回值]={函数体  return [表达式]}
  • 函数调用
函数名(参数列表)
//函数的定义和使用
def min(a:Int,b:Int)= if (a>b) b else a
println(min(10, 20))

//通过参数进行运算
def fun(a:Int,b:Int,c:String)= if (c.equals("+")) a+b
else if(c.equals("-")) a-b else if(c.equals("*")) a*b else a/b
println(fun(20,10,"/"))
//通过指定参数名字,传递参数值
def showMsg(name:String,age:Int) ={
println("hello,l'm:"+name,age+"old"}
showMsg("zhanghao",18)
showMsg(age=18,name="zhanghao")
//参数的长度为止,通过*来表示,可以传入多个参数
def showMsg2(name:String,s:String*) ={
    println(name)
    for(str <- s) {
        println(str)
    }
}
showMsg("XXX","XX","X")
  • 命名参数
    通常情况下,传入参数与函数定义的参数列表一一对应
    命名参数允许使用任意顺序传入参数

二、匿名函数

指不含函数名称的函数
匿名函数定义:
=> 的左边为参数列表
=> 的右边为函数体
如果函数体包括多条语句,应使用"{}"包含

(a:Int) => x*x
(a:Int) => {println(x);x*x}  //多条语句使用 {}
val f1=(a:Int) => {println(a);a*a}
println(f1(2))
val f2=f1
println(f2(2))   // 输出结果同f1一样都是4

val sum:(Int,Int) =>  Int = (a:Int,b:Int)  => a+b
println(sum(1,3))
//简化版
val sum:(Int,Int)=>Int=(_+_)

三、函数作为参数进行传递

def fun(a:Int,b:Int) = a+b
def fun1(a:Int,b:Int) = a-b
def fun2(a:Int,b:Int) = a*b

def funTest(f:(Int,Int) => Int,s:String) ={
    val res=f(100,200)
    s+res
}
println(funTest("总分",fun))
println(funTest((a:Int,b:Int) => 2*a+3*b,"abc="))

案例:输入一个数字,能被3整除则两数相加,>=5000输出“恭喜xxx工资已超过30%的人”<5000则输出"抱歉xxx您仍需继续努力",不能被三整除则两数相减,0>&<=3000则输出“xxx,您是一个节约的人” >3000则输出“xxx,您应当养成节约的良好习惯”

def getFunByNum(num:Int):(Int,Int)=>String=>Unit={
  if(num%3==0){
    def add(a:Int,b:Int):(String)=>Unit= {
      if (a + b >= 5000) {
          def show(name: String) = {
          println("恭喜," + name + "工资超过30%的人")
          }
        show
      } else {
          def show(name: String) = {
          println("抱歉," + name + "您仍需继续努力")
          }
        show
      }
    }
    add
  }else{
    def sub(a:Int,b:Int):String=>Unit={
      if(a-b<=3000&&a-b>0){
          def show(name:String)={
          println(name+",您是一个节约的人")
          }
        show
      }else if(a-b>3000){
          def show(name:String): Unit ={
          println(name+"您应当养成节约的良好习惯")
          }
        show
      }else{
         def show(name:String)={
         println(name+",您的输入不合法")
          }
        show
       }
    }
    sub
  }
}
getFunByNum(31)(5000,2000)("张三")

四、函数作为返回值

def funTest2():(String,String) => String ={
  def fun(str1:String,str2:String):String={
    str1+"##"+str2+"$$"
  }
  fun
}
println((funTest2()("aa", "bb")))

五、函数作为参数和返回值

案例:函数作为参数传入Str返回Int,如果能被3整除两数相加,不能则两数相减

def fun(f:(String)=>Int,str:String):(Int,Int)=>Int={
    var num=f(str)
    if(num%3==0){
        (a:Int,b:Int) => a+b
    }else{
        (a:Int,b:Int) => a-b    
    }
}
val res = fun((s:String) => {if(s.equals("上海")) 3 else 1},"上海")(30,20)
println(res)  //50
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值