Scala基础
学习twitter的scala教程的笔记
函数
-
函数定义,scala语法中可以使用多种方式定义函数,比如:
- 直接用等号定义,
def func(x:Int):Int = x+1
- 用大括号定义
- 直接用等号定义,
def func2(x:Int):Int = {
return x+1
}
* 用匿名函数定义,`val func3=(x:Int)=> x+1`,可以使用大括号{},`val func3=()=>{x+1}`,在此例中func3为方法名,等号为赋值,可以理解为将等号后面的内容赋值给func3。
-
匿名函数是指用户可以定义一个函数,而不用指定这个函数的名称。可以对比思考Java语言中的匿名类,语法为
(x:Int)=>x+1
或者使用括号{},(x:Int)=>{x+1}
,返回值类型为=>后的最后一个表达式 - 有类型的函数,scala函数的函数其实都是对象,所以可以通过赋值的方式定义,那么既然是对象,就有类型。scala函数的类型都是这个样子的:
scala.Function1[Int,Int]
。Function1指的是一个入参的函数,顾名思义Function2是两个入参的函数。最多可以有22个入参。既然是对象,就有方法,函数的执行,使用过基类的apply方法调用的。所以如果我明定义func3为一个函数类型的对象,那么可以通过func3.apply()的方式执行func3函数。 - 函数作为参数使用,因为函数使用类型的,那么就可以作为参数传递。比如:
object Main extends App {
println(timesTwo(2))
println(best(2,(x:Int)=>x+1))
println(best(2,timesTwo))
def timesTwo(i:Int):Int={
i*2
}
def best(i:Int,f:scala.Function1[Int,Int]): Int ={
return f.apply(i)
}
}
- 偏函数与柯理化函数,这是函数部分最复杂的内容了。先说偏函数化(partial application),在scala中有种东西叫”“。如果下划线出现在函数的参数中,那么就意味着这个参数的值还不确定,有点类似于占位符或者通配符的概念,如果调用一个函数的时候,向一个参数中传递了”“,那么这次调用不会返回值,而是返回另一个函数,函数的入参就是刚才被"_"占位的参数列表。而柯里化函数是更加明确的使用偏函数。可以通过函数上的curried方法讲一个普通函数转为柯里化函数。例子:
def multiply(m:Int)(n:Int):Int=n*m
val multiply2=(m:Int,n:Int)=> n*m
val multiply3=multiply2.curried
网友评论