scala函数与方法

函数与方法的区别

方法:作用于对象,是对象的行为
def 方法名称(参数列表):返回值 = 方法体
函数:是一个对象,实现了FunctionN特质的对象
val 函数名称 =(参数列表) =>{ 函数体 }

定义

//def方法
def fac(x:Int) = if(x>=0) x else ""
//fac: fac[](val x: Int) => Any

//val函数
val fac = (x: Int) => if (x >= 0) x else ""
//fac: Int => Any = <function1>

如果函数体只有一条语句可以省略大括号:

val fac=(x:Int) => if(x>=0) x else ""
//fac: Int => Any = <function1>

上面的返回值类型都是隐式的(没有使用return前提下),根据最后一个值推导出其返回值类型(隐式转换),可见函数和方法的返回类型可以是多类型的

显式类型(def)

如果使用return,则只能是方法,必须显式声明返回类型,即方法的返回类型只能是一个类型

def fac(x:Int):Int = if(x>=0) return x else return -x

递归:

def fac(n: Int): Int = if (n <= 0) 1 else n * fac(n - 1)
//fac: fac[](val n: Int) => Int

默认参数(def)

def combine(content:String, left: String = "[", right: String = "]") = left + content +right
combine("scala") //res0: String = [scala]
combine("scala","{") //res1: String = {scala]
combine("scala","{","}") //res2: String = {scala}

代码参数(def)

def combine(content:String, left: String = "[", right: String = "]") = left + content +right
combine("scala", right="}") //res3: String = [scala}

可变参数

def sum(args : Int*):Int = {
  if(args.length == 0 )
    0
  else
    args.head + sum(args.tail: _*)
}
sum(1) //1
sum(1,2) //3

过程

scala对不返回值的方法有特殊的表示法。如果方法体包含在花括号中但没有前面的=号,那么返回类型是Unit。这样的方法叫做过程

def draw(s: String) {
  println("-------")
  println("|" + "   " + "|")
  println("|" + s + "|")
  println("|" + "   " + "|")
  println("-------")
}

println(draw("123"))
/*
-------
|   |
|123|
|   |
-------
()
*/

偏函数

当函数有多个参数,而在使用该函数时不想提供所有参数,此时得到的函数便是偏函数

def sum(a: Int, b: Int, c: Int) = a + b + c
val fp = sum(1, _: Int, 3) //fp即是偏函数
println(fp(2))
println(fp(10))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值