Scala学习一
时间:2022-07-26
本文章向大家介绍Scala学习一,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、scala中的方法
1.Scala中方法的格式
def 方法名(参数名:参数类型,参数名:参数类型):[return type]={//方法体}
省略条件:
1.参数列表的参数类型不能省略
2.参数值类型可以省略,由scala编译器自动推断
3.返回值可以不写return,默认就是{}块表达式的值
4.定义递归方法,不能省略返回值类型
如:获取最大值
//定义方法
def getMaxNum(a:Int, b:Int):Int = {
return if(a > b) a else b
}
//调用方法
val maxNum = getMaxNum(20, 40)
//打印结果
printIn("maxNum: " + maxNum)
根据上面的省略条件2可以进行省略:
//定义方法
def getMaxNum(a:Int, b:Int) = if(a>b) a else b
//调用方法
val maxNum = getMaxNum(20, 40)
//打印结果
printIn("maxNum: "+ maxNum)
2.使用惰性方法
当记录方法返回值的变量被声明为lazy时,方法的执行将被推迟,直到我们首次使用该值时,方法才会执行。类似java中的延迟加载。同时lazy不能修饰var类型的变量。
例如想延迟调用则
//定义方法
def getSum(a:Int, b:Int)= a + b
//使用惰性方法
lazy val sum = getSum(1,2);
//调用是才会加载getSum()方法
printIn("sum: " + sum)
3.Scala中的方法参数
默认参数、带名参数、变长参数
默认参数:
//定义方法,同时带默认值
def getSum(x:Int = 10 , y:Int = 20) = x + y
//通过该默认参数的形式调用该方法
val sum = getSum()
//打印结果
print("sum: " + sum) //30
带名参数
//定义方法,同时带默认值
def getSum(x:Int = 10 , y:Int) = x + y
//通过该默认参数的形式调用该方法
val sum = getSum(y=10)
//打印结果
print("sum: " + sum) //20
变长参数
def 方法名(参数名:参数类型*):返回值类型 = {
//方法体
}
例如:
//定义方法
def getSum(a:Int*)=a.sum
//调用方法
val sum = getSum(3,4,5,6,7)
//打印结果
printIn("sum: "+ sum) //25
二、函数
定义函数
val 函数变量名 = (参数名:参数类型,参数名:参数类型) =>函数体
使用函数
//定义函数
val getSum = (x:Int,y:Int) => x + y
//调用函数
val result = getSum(20,30)
//打印结果
printIn("result: "+ result) //50
Scala中的方法与函数:
方法是属于类或者对象的,在运行时,它是加载到JVM的方法区中,而函数则是加载到JVM的堆内存中,同时可以将函数对象赋值给一个变量。函数是一个对象,继承自FunctionN,函数对象有apply、curried、toSting、tupled这些方法,而方法则没有。这是scala与java不同的地方。
将方法转换成函数的方式
val 变量名 = 方法名 _ //格式为: 方法名 + 空格 + 下划线
例如:
//定义方法
def add(x:Int, y:Int) = x + y
//将方法换成函数
val a = add _
//调用函数
val result = a(10,30)
//打印结果
printIn("result: " + result) //40
关于for循环写法
for(i <- 1 to n) 等价于 for(int i = 1, i <= n, n++)
进行插值打印方式
//打印参数j*i= (j*i的积),如3*5=15
print(s"${j}*${i}=${j*i})
- Python为什么这么火?聆听Python之父诠释Python的精神和文化
- 阿里程序员2017年终总结:web前端最有效学习方法!让你少走弯路
- 《关于深化“互联网+先进制造业”发展工业互联网的指导意见》的系列解读 解读二:打造平台体系
- 2018最火的AI丶云计算丶大数据丶物联网丶量子计算五大热门之间的关系
- 人工智能或能帮助揭示永葆青春的秘密 寻减缓衰老药物
- 近百万的“荣耀”域名遭仲裁 两个终端的对决
- IT专业人员如何看待软件定义的数据中心市场
- 安正平:网络隐私保护不能止于关闭直播平台
- 摩拜与武汉地铁深度合作,网上买地铁票又多了一种渠道
- 从零推导神经网络之入门篇
- 支付宝红包到底是谁挣了?
- 计算机行业2018年度投资策略报告:人工智能为主线,关注行业落地
- 闪电网络原理通俗解释
- AI、机器学习和深度学习的关系及区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言泊松回归对保险定价建模中的应用:风险敞口作为可能的解释变量
- Vue 页面权限控制和登陆验证
- Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)C. The Phone Number
- Codeforces Beta Round #3 C. Tic-tac-toe
- [记录] 数据库中,根据经纬度,查询距离最近的地点
- PAT (Basic Level) Practice (中文)1010 一元多项式求导 (25 分)
- R语言随机森林模型中具有相关特征的变量重要性
- PAT (Basic Level) Practice (中文)1009 说反话 (20 分)
- Codeforces Beta Round #8 A. Train and Peter
- Codeforces Round #559 (Div. 2)B. Expansion coefficient of the array
- Codeforces Beta Round #72 (Div. 1 Only)B. Doctor
- pygame游戏常用方法
- node-blog:用 node 搭建的个人开源博客
- 2018-2019 ICPC, NEERC, Southern Subregional Contest D. Garbage Disposal
- 「查缺补漏」JavaScript执行上下文-执行栈