Scala函数(二)

it2025-06-11  7

Scala函数二

一、柯理化二、模式匹配三、样例类四、隐式参数五、隐式函数隐式函数参数优先级隐式函数应用场景

一、柯理化

方法可以定义多个参数列表,当使用较少的参数列表调用多参数列表的方法时,会产生一个新的函数,该函数接收剩余的参数列表作为其参数。这被称为柯里化。

def fun(a:Int,b:Int,c:Int)(d:Int)=a+b+c+d println(fun(1,2,3)(4)) //10 def fun1(a:Int,b:Int)(c:Int)(d:Int)=a+b+c+d println(fun1(1,2)(3)(4)) //10

二、模式匹配

模式匹配包含了一系列备选项,每个都开始于关键字 case。每个备选项都包含了一个模式及一到多个表达式。箭头符号 => 隔开了模式和表达式。 match 对应 Java 里的 switch,但是写在选择器表达式之后。match 表达式通过以代码编写的先后次序尝试每个模式来完成计算,只要发现有一个匹配的case,剩下的case不会继续匹配。

def match(x:Int):String=x match{ case 1=>"one" case 2=>"two" case _=>"other" //其他选项用 "_"表示 } println(match(1)) //输出one def match1(x:Any) =x match{ case i:Int =>println("输入的值类型为Int类型,值为:"+i) case j:String =>println("输入的值类型为String类型,值为:"+j) case _ =>println("输入类型未知") } match1(2) //输入得值类型为Int类型,值为:2

更详细内容:模式匹配详解

三、样例类

使用了case关键字的类定义就是就是样例类(case classes),样例类是种特殊的类,经过优化以用于模式匹配。

case class Teacher(name:String,age:Int) def match(teacher:Teacher) =teacher match{ case Teacher("mike",27) =>println("hello green") case Teacher("green",35) =>printLn("hello green") case x:Teacher=> println("hello x.name") } def main(args: Array[String]): Unit = { var t=Teacher("green",35) match(t) }

四、隐式参数

方法可以具有隐式参数列表,由参数列表开头的implicit 关键字标记

implict只能修改最尾部的参数列表,应用于其全部参数Scala可自动传递正确类型的隐式值通常与柯里化函数结合使用 //隐式参数的定义 implicit var a:Int =10 implicit var b:String="hello"

五、隐式函数

隐式函数也称隐式转换,使用implicit修饰的函数

//注:隐式函数可以没有默认参数,即写成 implicit c:Int def fun(a:Int,b:Int)(implicit c:Int=5):Int=a+b+c println(fun(10,10)) //25 println(fun(10,10)(30)) //50 //带有隐式参数 implicit var a:Int= 10 def fun1(a:Int,b:Int)(implicit c:Int=5):Int=a+b+c println(fun1(10,10)) //30 println(fun1(10,10)(20)) //40

隐式函数参数优先级

传参>隐式参数>默认参数

隐式函数应用场景

1、类型转换

implicit def DoubleToInt(a:Double)=a.ToInt var x:Int=3.5 println(x) //打印结果3

implicit def stringToInt(x:String):Int=Integer.parseInt(x) var x:Int="1" println(x) //输出 1

2、类型增强

implicit def boolToInt(x:Boolean)=if(x) 1 else 0 println(1+true) //2 println(1+false) //1
最新回复(0)