【scala】 函数总结

字面量

字面量:直接在源代码里书写的‘值’,例如:

  • 整数字面量:10,34L
  • 浮点数字面量:3.14, 4.56F
  • 布尔型字面量:false, true
  • 字符串字面量:“hello world”
  • 字符字面量:‘A’, ‘\u0045’, ‘’’(转义)
变量

scala声明一个变量的基本语法:

val 变量名:变量类型 = 初始值
var 变量名:变量类型 = 初始值

初始值可以是字面量或变量名

函数

scala中,函数成为了和普通的变量一样的‘头等公民’,可以像其他任何数据类型的值一样的被传递和操作。
函数的值也叫做函数的字面量。整数字面量就是一个整数,类推即:函数字面量就是一个函数。

# 可以在整数字面量中指出变量类型,同理可以在函数字面量中指出参数类型,即匿名函数
scala> val a = 10L
a: Long = 10

scala> val a:Long = 10
a: Long = 10

scala> val a:Int = 10L
                  ^
      error: type mismatch;
       found   : Long(10L)
       required: Int

类或者单例对象中的成员函数叫做方法,其定义的基本语法为:

def 方法名(函数列表): 返回结果类型 = {方法体}

函数既然作为‘头等公民’,也要有“类型” 和 “值” 的区分。
函数类型需要明确函数接受多少个参数,每个参数的类型以及函数返回结果的类型;则是一个函数的具体实现(变量列表=> 映射关系/运算语句)。例如:

声明函数的语法和声明变量语法相同:

val 函数名:函数类型 = 函数值

函数值的基本语法(当只有一个参数时,可以省略圆括号(), 当映射关系(或叫做运算语句)只有一条语句时,可以省略大括号{}:

(参数列表)=> {映射关系}

scala> val fun:(Int, Int) => Int = (x, y) => {val z = x*2; z+y }
fun: (Int, Int) => Int = $$Lambda$892/1107130176@35e50381

scala> fun(3,4)
res15: Int = 10
匿名函数

匿名函数(Lambda表达式):给出了函数参数类型的函数字面量。
因为匿名函数中给出了函数的参数类型,并且scala有类型推断系统,所以定义函数变量时如果函数字面量写成匿名函数形式,便可以省略“函数类型”。

占位符函数

如果函数的每个参数在函数映射/运算语句中仅出现一次,可以省略"=>"并用下划线作为参数的占位符来简化函数字面量的表示,第一个下划线代表第一个参数,第二个下划线代表第二个参数,以此类推。例如:

# 函数的普通语法
scala> val add:(Int, Int)=>Int = (x,y)=>x+y
add: (Int, Int) => Int = $$Lambda$893/1671201590@2d617d27

scala> add(2,3)
res16: Int = 5

# 匿名函数语法
scala> val add = (x:Int,y:Int)=>x+y
add: (Int, Int) => Int = $$Lambda$894/1578614193@231e72e1

scala> add(2,3)
res17: Int = 5

# 占位符语法
scala> val add:(Int, Int)=>Int = _ + _    # 看到形如 ‘_*2’ 的表达式时,要知道是一个函数字面量。
add: (Int, Int) => Int = $$Lambda$901/102034667@551d933f

scala> add(2,3)
res19: Int = 5

scala> val add = (_:Int) + (_:Int)   #有类型时括号不能省略   
add: (Int, Int) => Int = $$Lambda$900/1593829543@2aeaa332

scala> add(2,3)
res18: Int = 5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值