scala-Unit-3-Scala基础语法2
一、定义方法、函数、及方法转换为函数
1.方法的定义:
def 方法名(参数1:数据类型,参数2:数据类型...):返回值类型 ={
}
2.定义函数:
val h1 = (a:Int,b:Int) => {a * b}
3.方法转换为函数(在Windows下的命令行操作)
def m2(a:Int,b:Int):Int =a + b
m2 _
然后系统生产:res6:(Int,Int) => Int =(function2)
注释:(function2)表示一个函数,并且有两个参数、 (Int,Int)代表参数列表
**方法和函数的区别会单独用一片来整理
二、传值调用&传名调用
什么是函数式编程? A:方法的参数可以是一个函数的编程模型
1.传值调用:方法传递的是值,详情见如下代码:
object AntForest {
var energy = 1000
def getEnergy():Int={
energy += 50
energy
}
def getManyEnergy(x: Int):Unit={
for(a <- 1 to 5){
getEnergy()
println(s"您现在的能量为:$x")
}
println(energy)
}
def main(args: Array[String]): Unit = {
getManyEnergy(getEnergy())
}
}
解释:先计算getEnergy的值,将值作为参数放在getManyEnery中使用
输出结果:
您现在的能量为:1050
您现在的能量为:1050
您现在的能量为:1050
您现在的能量为:1050
您现在的能量为:1050
1300
2.传名调用:将方法作为函数被其他方法调用,详情见如下代码:
object AntForest {
var energy = 1000
def getEnergy():Int={
energy += 50
energy
}
def getManyEnergy(x: => Int):Unit={
for(a <- 1 to 5){
getEnergy()
println(s"您现在的能量为:$x")
}
println(energy)
}
def main(args: Array[String]): Unit = {
getManyEnergy(getEnergy())
}
}
解释:将getEnergy作为函数被getManyEnergy调用
输出结果:
您现在的能量为:1100
您现在的能量为:1200
您现在的能量为:1300
您现在的能量为:1400
您现在的能量为:1500
1500
二、可变参数函数与默认参数函数
1.可变参数函数:
Java中可变参数的函数:public static void m1(String...arg){ }
Scala中可变参数函数:def sum(ints:Int*):Unit={ }
object manyPara {
def sum(ints:Int*):Int={
var sum = 0
for(v <- ints){
sum += v
}
sum
}
def setName(params:Any*):Any={
return params
}
def main(args: Array[String]): Unit = {
println(sum(1,3,5,7,9)) //25
println(setName("Wyh",23,"man")) //WrappedArray(Wyh, 23, man)
}
}
2.默认参数函数:
如果传递了参数,测试用传递的值。如果不传递参数,测试用默认值
object defaultParam {
def sum(a:Int=3,b:Int=7):Int={
a+b
}
def main(args: Array[String]): Unit = {
println(sum()) //10
println(sum(1,5)) //6
}
}
三、高阶函数
定义:将其他函数作为参数,或其结果是函数的函数
object higherOrderFunction {
def getPerson(h:Int => String,f:Int):String={
h(f)
}
def Person(x:Int):String= "我是" + x.toString + "岁的帅哥"
def main(args: Array[String]): Unit = {
println(getPerson(Person,18))
}
}
解释:其中getPerson方法的参数为一个函数h、一个变量f,执行体为参数为f的函数h,h(f),
在main方法中getPerson方法将Person方法变为函数,与变量18作为参数,
执行输出:我是18岁的帅哥
四、字符串的格式化输出
常规输出方式:val name = "hunter"
var age = 18
println("name:" + name ",age:" + age)
格式化输出:文字插值器(f、s)
println(f"name = $name,age = $age") println(s"name = $name. age = $age")
println(f"1 + 1 = ${1+1}") println(s"1 + 1 = ${1+1}")
五、部分参数应用函数
如果函数传递所有预期的参数,则表示完全应用了它;
如果只传递了所有参数当中的几个,那么见返回部分应用的函数。
eg.命令行操作:
val sum = (a:Int,b:Int) => a+b
val sum1 = sum(1,_:Int)
println(sum1(4)) //输出5
代码例子如下:
import java.util.Date
object PartParam extends App {
def log(date:Date,message:String):Unit={
println(s"$date,$message")
}
val date = new Date()
val longMessage = log(date,_:String)
log(date,message = "HelloHunter") //Wed Jan 09 18:36:51 CST 2019,HelloHunter
longMessage("rebahenmei") //Wed Jan 09 18:36:51 CST 2019,rebahenmei
}
解释:1.使用日期Date要导入java的util包。
2.App为Scala中的一个特质,可以不写main方法直接运行程序(如Java中的Test、Before)
六、柯理化
将原来接受的两个参数的函数变为一个新的接收一个参数的函数的过程叫做柯理化
eg.
def sum(a:Int,b:Int) = a+b
def sum(s:Int)(b:Int) = a+b
这两个方法是等价的。柯理化可将函数的通用性降低,适用性提高。
通用性:适用于所有或者很多的情况
适用性:适用于一种或几种的情况
七、偏函数
被包裹在花阔内没有match的一组case语句,是一个偏函数
PartialFunction[A,B]
A;参数类型 B:返回值类型
偏函数常用于模式匹配
object PartialFunction {
def func1(str:String):Int={
if (str.equals("hunter")) 32 else 18
}
def func2:PartialFunction[String,Int]={
//使用偏函数必须使用case
case "hunter" => 32
case _ => 18
}
def main(args: Array[String]): Unit = {
println(func1("hunter")) // 32
println(func1("Wyh")) //18
println(func2("hunter")) //32
println(func2("Wyh")) //18
}
}
偏函数类似于Java中的swtich/case语句。
scala-Unit-3-Scala基础语法2的更多相关文章
- Spark入门到精通--(第二节)Scala编程详解基础语法
Scala是什么? Scala是以实现scaleable language为初衷设计出来的一门语言.官方中,称它是object-oriented language和functional languag ...
- Scala - 快速学习03 - 基础语法
1- 变量 变量 mutable variable 在程序运行过程中其值可能发生改变的量 关键词var定义变量,定义时直接进行求值 常量 immutable variable 在程序运行过程中其值不会 ...
- Scala(二)——基础语法(与Java的区分)和函数式编程
Scala快速入门(二) 一.键盘输入 关于基本类型的运算,以及复制运算,条件运算,运算符等知识,均和Java语言一样,这里不过多叙述. val name = StdIn.readLine() Std ...
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: :声明val变量:可以使用val来声明变 ...
- 【Scala学习之一】 Scala基础语法
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...
- Scala简介及基础语法
一.scala简介 官网:https://www.scala-lang.org/ Scala语言很强大,集成了面向对象和函数式编程的特点. 运行在JVM(jdk). 大数据中为什么学习scala? s ...
- 1.scala基础语法总结
Scala基础语法总结:Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的.如果一行里写多个语句那么分号是需要的 val s = "菜鸟教程"; pr ...
- Scala学习(一)——基础语法
Scala语言是一种面向对象语言,结合了命令式(imperative)和函数式(functional)编程风格,其设计理念是创造一种更好地支持组件的语言. 特性 多范式(Multi-Paradigm) ...
- Scala基础语法 (一)
如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...
- Scala入门系列(一):基础语法
Scala基础语法 Scala与JAVA的关系 Scala是基于Java虚拟机,也就是JVM的一门编程语言,所有Scala的代码都需要经过编译为字节码,然后交由Java虚拟机来运行. 所以Scala和 ...
随机推荐
- v-html里面添加样式
项目中,使用V-html渲染的页面,要添加样式,改如何做 解决方案1:在updated生命周期函数中,js动态配置样式,代码如下: updated() { $('.msgHtmlBox').find( ...
- 清北学堂 清北-Day1-R1-Count
题目描述 问有几个无序二元组 (x; y) 满足 xy ≡ 1 (mod P ); 0 ≤ x < P; 0 ≤ y <P.无序二元组是指,如果 P = 10, (3; 7) 和 (7; ...
- 查询oracle比较慢的session和sql
注:本文来源:sxhong <查询oracle比较慢的session和sql> ---查询最慢的sql select * from ( select parsing_user_id,e ...
- js工具库---Lodash
Lodash是一个一致性.模块化.高性能的 JavaScript 实用工具库 为什么选择 Lodash ? Lodash 通过降低 array.number.objects.string 等等的使用难 ...
- day06 数字类型,字符串类型,列表类型
一:整型int# ======================================基本使用======================================# 1.用途:记录年龄 ...
- Maven集成SSM
目录 Maven 集成SSM 添加log4j配置文件 配置web.xml 添加编码过滤器 添加put和delete请求 配置springmvc.xml 配置文件上传 配置druid连接池信息 配置sq ...
- PDF编辑方法,PDF怎么去除背景
PDF文件现在是使用的频率很高的一个软件的格式,PDF文件能够更加直观清楚的表达,PDF文件的使用很方便但编辑起来就来没有那么容易了,PDF文件的编辑是需要借助软件的,今天小编就来跟大家分享一下PDF ...
- Android Studio 调用夜神模拟器
操作系统:Windows 10 x64 IDE:Android Studio 3.3 夜神模拟器 首先,启动夜神模拟器.快捷键WIN + R打开运行窗口,输入cmd,启动cmd.exe. 使用cd命令 ...
- golang 打包,交叉编译,压缩
打包,压缩 我们的常规打包方式 $ go build Mac下我们用 ls -lh查看,可以看到我们打包出来的可执行文件会比较大,一般只写几行代码就回又3M以上的文件大小了. 我们的带压缩的打包方式 ...
- mysql 5.7 安装
linux(CentOS6.7) 环境Mysql 5.7.17安装教程分享给大家,供大家参考,具体内容如下: 1系统约定 安装文件下载目录:/data/software Mysql目录安装位置:/us ...