Scala基础语法:函数的定义以及元祖

it2023-02-18  77

Scala函数

方法: def 函数名([参数列表])[:返回类型]={ 函数体 [return]表达式 }

def main(args: Array[String]): Unit = { def square(x: Int): Int = { return x * x } println(square(2)) }

square是函数名; x:Int定义了参数的类型; :Int 是输出结果类型即返回值类型 输出结果为4 上述的方式我们还可以进行简化:

def main(args: Array[String]): Unit = { def square(x: Int) = x * x println(square(2)) }

返回值类型可以不写,直接定义后面的函数体。Scala会根据函数体自动识别返回值类型。

定义函数方法二: 匿名函数 val 变量名=(参数列表)=>函数体 这一种定义方法和上述方法相比,我们并没有直接定义一个函数,而是只定义了一个函数的方法,然后把这个方法赋予给一个变量或者常量。这种方法称为匿名函数。

val sum=(x:Int,y:Int)=>x+y println(sum(1, 2))

可以看到输出结果为3 定义不写参数名的函数

val sum2: (Int, Int) => Int=(_+_) println(sum2(3,4))

这也是一个匿名函数。我们用下划线代指两个传入的值 函数作为参数列表

def fun(x:Int,y:Int):Int=x+y def sum3(f:(Int,Int)=>Int,s:String):String={ val res=f(2,3) s+res } println(sum3(fun,"abc"))

首先定义一个函数fun,在另一函数的参数列表中定义一个函数的类型, 函数体中指定参数列表中函数的参数。 在最后调用的时候,我们可以调用我们定义的fun函数作为参数。 函数作为返回值

def sum4():(Int,Int)=>Int={ def demon(x:Int,y:Int)={ x+y } demon } println(sum4()(2, 3))

用函数作为返回值,需要内嵌一个函数,用来定义返回值函数 传入多个参数 当我我们建立一个函数的时候,有时候不清楚到底需要传多少个参数列表,此时,我们就可以采取以下方法解决。

def student(grade:Int,name:String*)= { println(grade) for (str <- name) println(str) } student(1,"sam","john","sally","...")

String*表示可以传多个相同类型的参数,在函数体中通过for循环遍历

元祖

元祖可以包含不同类型的元素,但最多支持22个元素(Tuple~Tuple22). 在访问元祖时,我们可以使用下划线"_“访问元素,”_1"表示第一个元素。 元祖的声明方式一

var tup1=("sam",20,"Math",90.5) println(tup1._1) println(tup1._2) println(tup1._3) println(tup1._4)

也可以通过遍历的方式,把元祖的数据全部输出

var tup1=("sam",20,"Math",90.5) tup1.productIterator.foreach(i=>println(i))

productIterator:是生成一个迭代器 foreach:打印出元祖的每一个数据 元祖的声明方式二 注意这里的Tuple3指的是元祖的大小为3,即为3条数据,如果想插入4条就为Tuple4,22为上限

var tup2=new Tuple3("Mike",18,86) tup2.productIterator.foreach(i=>println(i))

元祖声明方式三

var tup3="John"->85 println(tup3)

从输出结果来看,生成的是一个二元元祖,那么如果再加一个 ->呢

var tup3="John"->85->90 println(tup3)

生成的结果依然为一个二元组,只是把一个二元组当成了一个元祖数据。这是因为在运行时,先运行的 “John”->85,二者生成一个二元组,再运行->90,二者组合成一个二元组 将元祖元素依次赋给变量

var (name, age, score) = tup2 println(name) println(age) println(score)

把tup2的元素依次传给定义的变量

最新回复(0)