Scala函数(二)

本文深入探讨Scala编程语言的关键特性,包括柯理化(Currying)如何创建部分应用函数,模式匹配的使用方式及其在类型检查中的作用,样例类(case classes)在模式匹配中的优化,以及隐式参数和隐式函数的概念、应用场景,如类型转换和类型增强。了解这些特性有助于提升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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值