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和 ...
随机推荐
- DecimalFormat详解
DecimalFormat继承自NumberFormat,可以使用它将十进制的数以不同形式格式化为字符串形式,可以控制前导和尾随0.前缀.后缀.分组(千).小数分隔符等,如果要更改格式符号(例如小数点 ...
- js获取参数函数
- kotlin学习笔记-异常好玩的list集合总结
不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...
- easyui datagrid 隔行变色
easyui datagrid 隔行变色 一:实现样图 二:实现代码 $('#dataGrid').datagrid({ rowStyler:function(index,row){ if (row ...
- Dig skipfish proxystrike
1.DNS域名信息收集,(Dig,挖掘局域网的信息之前的博客中已经做过介绍) 查询需要认证的域名服务器 dig -t ns + 网址 使用工具 fierce 判断主机上存活的其他域名服务器 ...
- Java File mkdir() mkdirs()
使用mkdir()和mkdirs()创建文件夹的区别. 1.mkdir() 如果父目录不存在,则创建失败. 2.mkdirs() 如果父目录不存在,连同父目录一起创建. 注意,在IO_Study01文 ...
- python面向对象三大特性之封装
一. 概述 定义:隐藏对象的属性和实现细节,仅对外提供公共访问方式 封装的原则:把不需要对外提供的内容都隐藏起来,提供公共的方法访问这些隐藏属性 二.封装手段 使用双下划线将属性和方法隐藏起来 cla ...
- youtube-dl更新出错解决办法
youtube-dl更新命令: youtube-dl -U 更新报错:无法识别当前版本 ERROR: can't find the current version. Please try again ...
- maven如果正常配置不成功,就按照我的就可以配置成功了
常规的配置如下 非常规的配置 如果上面都没有问题,还是不能创建成功,就是maven配路径的问题,如图所示 如下图所示即是正确配置
- IDM的Google商店插件
官方扩展链接:https://chrome.google.com/webstore/detail/idm-integration-module/ngpampappnmepgilojfohadhhmbh ...