Scala函数详细介绍

Scala函数
函数是Scala的核心

//函数的定义
def 函数名[参数列表]:[返回值类型]={
    函数体
    return[表达式]
 }
 //函数调用
 函数名[参数列表]

命名参数

//通常情况下,传入的参数与函数定义的参数列表应一一对应
def printName(first:String, last:String) = {
    println(first + " " + last)
}
printName("John","Smith")
//也允许使用任意顺序传入参数
printName(first = "John",last = "Smith")
printName(last = "Smith",first = "John")

**参数缺省值

def printName(first:String="John", last:String="Smith") = {
    println(first + " " + last)
}
printName()

匿名函数
指的是不含函数名称的函数
=>右边为参数列表,=>左边为函数体

(x:Int)=>x*x
(x:Int)=>{println(x);x*x}
() => { System.getProperty("user.dir") }
val f1=(x:Int)=>{println(x);x*x}
f1(2)

函数作为参数进行传递

def fun(a:Int,b:Int):Int=a+b
//定义一个匿名函数f作为funTest的参数
def funTest(f:(Int,Int)=>Int,s:String):String={
   //给匿名函数传参
   val resultValue=f(2000,3000)
   //返回值
   s+resultValue
   }
   //给funtest函数传参数时候,可以借用fun函数的函数体给匿名函数f使用,前提是参数列表和返回值类型一致
   println( funTest(fun,"你的工资是") )
   //也可以自己给f函数重新写一个函数体
   println( funTest((a:Int,b:Int)=>a+b,"你的工资是") )

函数作为返回值

def funTest2():(String,String)=>String={
    def fun1(str1:String,str2:String):String={
    str1+str2
    }
    fun1
}
    println( funTest2()("你的姓名是","某某某") )    

函数作为参数,作为返回值

def funMsg(f:(String)=>Int,Str:String):(Int:Int)=>Int={
    var intNum=f(str)
    if(intNum%3==0){
      (a:Int,b:Int)=>a+b
    }else{
      (a:Int,b:Int)=>a-b
    }
}
  val result=funMsg((s:String)=> if(s.equals("上海")) 3 else 0,"上海")(1000,2000)
  println(result)

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

def fun1(a:Int,b:Int,c:Int,d:Int):Int=a+b+c+d
def fun2(a:Int)(b:Int,c:Int,d:Int):Int=a+b+c+d
def fun3(a:Int)(b:Int)(c:Int,d:Int):Int=a+b+c+d
def fun4(a:Int,b:Int)(c:Int,d:Int):Int=a+b+c+d
//传入相同参数时候结果是一样的

隐式参数
方法可以具有隐式参数列表,由参数列表开头的implicit 关键字标记
implict只能修改最尾部的参数列表,应用于其全部参数
Scala可自动传递正确类型的隐式值
通常与柯里化函数结合使用

implicit var a:Int=10 //将作为Int类型隐式值自动传递
def sum(a:Int,b:Int)(implicit c:Int):Int=a+b+c
sum(10,20) // 40
implicit var str:String="结果 "
def sum(a:Int,b:Int)(implicit c:Int,str:String):String={
    str+(a+b+c)
}
sum(10,20) // 结果 40

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

//类型转换
implicit def doubleToInt(a:Double):Int={a.toInt}
val a:Int=3.5 //我们定义的a是Int类型,但是输入的数字是Double类型,却不会报错,因为此时a已经不等于3.5而是3
println(a) //3
//类型增强
implicit def booleanToInt(x:Boolean):Int=if(x) 1 else 0
println(1+true) //2

scala中case

//类型匹配
def match2(x:Any):Unit=x match {
  case a:Int=>println("输入的值类型为Int类型,值为:"+a)
  case s:String=>println("输入的值类型为String类型,值为:"+s)
  case _=>println("我布吉岛")
}
//模式匹配
case class Teacher(name:String,age:Int)
def match3(teacher: Teacher):Unit=teacher match {
  case Teacher("Tom",19)=>println("hello,Tom")
  case Teacher("Black",21)=>println("hello,Black")
  case x:Teacher=>{println("hello,"+x.name)}
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Scala函数式编程》是一本非常实用的Scala编程书籍,旨在教读者如何使用Scala编程语言实现函数式编程。该书通过具体的实例和案例来阐述Scala函数式编程的核心概念和技术,包括函数式编程基础、函数的高阶抽象、类型系统、模式匹配、并发编程、I/O 和异常处理等方面内容。这些知识点包含了Scala编程语言的重要概念,可以帮助读者深入掌握Scala函数式编程的技术,并在实际应用中运用它们。此外,该书也涵盖了Scala代码风格和整洁性等方面,对编成良好的代码有很大的帮助。总之,这本书对于学习Scala函数式编程的人来说是非常有实践价值的一本书籍。 ### 回答2: Scala函数式编程的PDF是一本非常有价值的学习资料。对于想要深入学习Scala函数式编程的开发者,这本书提供了全面详尽的指导和实践经验,帮助开发者理解函数式编程的核心概念和思想,并将其应用于Scala程序开发中。 该书主要包括以下内容: 1.函数式编程的基本概念和原则,如不可变性、高阶函数、currying、尾递归等等。 2.函数式数据结构和算法的实现,包括列表、栈、队列、树、图等等。 3.如何使用Scala语言支持函数式编程的特性,如case class、模式匹配、参数化类型、协变和逆变等等。 4.如何使用Scala函数式编程框架,如Akka、Spark等来构建高效的分布式应用。 这本书主要适合已经有一定Scala编程基础或者其他函数式编程语言经验的开发者阅读,由于书中的内容较为深入和专业,对于初学者不太友好。但对于有一定基础的Scala开发者来说,该书是一本非常有价值的参考资料,可以帮助他们更深入地理解Scala函数式编程,提高代码质量和开发效率。 ### 回答3: Scala是一种支持函数式编程范式的编程语言,从而满足了编程语言发展中对于高度抽象和复杂数据处理的需求。Scala函数式编程pdf是一个学习Scala函数式编程理论和实践的重要资源。 Scala函数式编程pdf包含Scala函数式编程核心概念和技术,例如高阶函数、不可变性、模式匹配和递归等。它还涵盖了Scala函数式编程中的一些常见问题和解决方案,以及Scala函数式编程如何与面向对象编程 (OOP)相融合等。 Scala函数式编程pdf还提供了丰富的实际案例,包括使用Scala函数式编程技术实现算法、数据处理、Web应用程序、分布式编程等等。 总之,Scala函数式编程pdf是Scala程序员学习和实践函数式编程的重要资源,它提供了理论、实践和案例相结合的综合性学习体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值