函数使用注意事项和细节3|学习笔记

简介: 快速学习函数使用注意事项和细节3。

开发者学堂课程【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(1030103457)) //传入数值

}

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"

相关文章
|
Android开发
解决圆形进度条ProgressBar的几个问题
Android自带的Progressbar默认就是圆形的,可以通过设置style属性 style="?android:attr/progressBarStyleHorizontal" 复制代码 这样就能变成条状进度条,如下: <ProgressBar android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressBarStyleHorizontal"/>
1583 0
|
算法 计算机视觉 网络架构
YOLOv7 | 模型结构与正负样本分配解析
YOLOv7 | 模型结构与正负样本分配解析
2124 0
YOLOv7 | 模型结构与正负样本分配解析
|
2月前
|
搜索推荐 API 开发工具
百宝箱开放平台 ✖️ Python SDK
百宝箱提供Python SDK,支持开发者集成其开放能力。需先发布应用,安装Python 3.6+环境后,通过pip安装tboxsdk,即可调用对话型、生成型智能体及文件上传等功能。
774 87
百宝箱开放平台 ✖️  Python SDK
|
Linux KVM 虚拟化
如何恢复故障KVM虚拟机qcow2磁盘镜像文件LVM分区中的数据
如何恢复故障KVM虚拟机qcow2磁盘镜像文件LVM分区中的数据
996 0
如何恢复故障KVM虚拟机qcow2磁盘镜像文件LVM分区中的数据
|
人工智能 搜索推荐
数字孪生与体育:运动员表现分析
数字孪生技术在体育领域的应用正逐步改变运动员的训练和表现分析方式。通过创建虚拟模型,该技术能够实现个性化训练计划制定、比赛环境模拟、潜在伤害风险预测、技术动作精细化分析及团队战术布局模拟。结合AI技术,数字孪生为教练和运动员提供实时反馈和数据驱动的决策支持,助力提升竞技水平。
|
编解码 数据可视化 数据挖掘
Pygal库创建可缩放的矢量图表
【10月更文挑战第18天】Pygal 是一个 Python 库,专门用于创建可缩放的矢量图表。它基于 SVG 格式,支持多种图表类型,如线图、柱状图、饼图等,并提供丰富的自定义选项和交互功能。安装简单,使用 pip 即可安装。Pygal 不仅支持基本图表的创建,还允许添加数据标签、图例、注释、动画效果和交互功能,适用于数据分析、数据可视化和网站开发等多种场景。
|
C语言
C语言进阶教程(传值调用和传址调用的区别)
C语言进阶教程(传值调用和传址调用的区别)
348 0
|
Python
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
324 1
|
图形学
【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)
【unity小技巧】实现FPS武器的瞄准放大效果(UGUI实现反向遮罩,全屏遮挡,局部镂空效果)
490 1
|
IDE 开发工具 Python
Python应用中缩进错误(IndentationError)
【5月更文挑战第16天】
542 2