Scala函数(一)

it2025-05-23  16

Scala函数一

一、Scala函数二、匿名函数三、函数作为参数进行传递四、函数作为返回值五、函数作为参数和返回值

一、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
最新回复(0)