开发者学堂课程【Scala 核心编程-基础:函数使用注意事项和细节3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8935
函数使用注意事项和细节3
内容介绍
一、细节12
二、函数练习题
一、细节12
Scala 函数支持可变参数,可变参数在后面会用到,Java 中也讲过是支持可变参数的,可变参数几乎所有的编程语言都支持。只要没有涉及到编程的范式,方法和函数是一个意思,当一个函数或者方法,个数不确定的时候,就可以使用可变参数,比如想要支持0到多个参数,就可以形参名称,后面写上类型加上*就可以。如果要支持1到多个参数,就是先写一个参数,后面再写可变参数,既然可以写一个那么就可以写两个参数,注意可变参数既然不能写在前面,一定是出现在形参列表的最后,这一点与 Java 是一样的,因为编译器在编译处理时,将可变参数写在最前面的话是无法确定可变参数到什么时候结束,所以可变参数一定要写在形参最后,如下:
1、基本语法
//支持0到多个参数
def sum(args :Int*):Int= {
//支持1到多个参数
def sum(n1: Int, args: Int*) :Int ={
2、使用的注意事项
(1) args 是集合,通过 for 循环可以访问到各个值。
(2)可变参数需要写在形参列表的最后。
3、应用案例
案例演示:编写一个函数 sum ,可以求出1到多个 int 的和
代码实现:
package com. atguigu. chapter05. fundetails
object Varparameters {
def main(args: Array[String]): Unit = {
//编写一个函数 sum,可以求出1到多个 int 的和
println( sum(10,30,10,3,45,7)) //传入数值
}
def sum(n1: Int, args: Int*): Int= { //定义 sum,传入 n1,无法确定形参个数所以写为 args,后面:隔开写上Int*,返回类型为Int类型。此时在界面中查看可变参数 args 类型,可以看到其实是一个序列 Seq[Int],泛型为Int,意思就是说如果这里写的是 Int*,泛型为 Int,写的 String*,则泛型就是 String。后面会讲到序列在Java中就是集合的一种。
println("args.length" + args.length) //打印 args 长度
//下面进行遍历
var sum = n1 //定义求和变量为 sum,默认赋值为 n1
for (item <- args) { //使用 for 循环便利,for 循环可以从1到多少,还可以直接做一个集合,不管这个集合是一个序列还是一个 map,包括数组或其他的都可以,然后 item 进行取出,args 便利,可以看到从序列中取出的每一个 item 都是 Int 类型,再进行运算 sum += item
sum += item
}
sum //返回 sum
}
}
以上代码描述就是第一个值预先赋给 sum,序列中其他的可变参数进行便利加。
如果将可变参数写到前面的话,则会出现报错,报错为 *-parameter must come last,即可变参数需要放在最后,代码如下
…
def sum2(args: Int*,n1: Int): Int= {
1
}
}
二、函数练习题
判断下面的代码是否正确:
object Hello01 {
def main(args: Array[String]):Unit = {
def f1 = "venassa" //定义函数 f1="venassa"
println(f1)
}}
代码为正确的,因为def f1 = "venassa"等价于下面这种写法,
def f1()= {
"venassa"
}
但是因为函数里面只有一句话,所以大括号可以去掉,简写为 def f1()="venassa",又因为没有一个形参,所以可以去掉小括号变为 f1="venassa"。