Scala基础知识(二)
1.条件表达式
object ConditionDemo {
def main(args: Array[String]) {
val x =
//判断x的值,将结果赋给y
val y = if (x > ) else -
//打印y的值
println(y)
//支持混合类型表达式
val z = if (x > ) else "error"
//打印z的值
println(z)
//如果缺失else,相当于if (x > 2) 1 else ()
val m = if (x > )
println(m)
//在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void
val n = if (x > ) else ()
println(n)
//if和else if
val k = if (x < )
else if (x >= ) else -
println(k)
}
}
2.块表达式
val result = {
if (x < ){
-
} else if(x >= ) {
} else {
"error"
}
}
块表达式中一般最后一个参数就是表达式的返回值。
3.循环语句
for循环 1 to 10 ,to是一个方法,是将1到10数据产生
for的格式1: for(i <- res1)object ForDemo {
def main(args: Array[String]) {
//for(i <- 表达式),表达式1 到 10返回一个Range
//每次循环将区间中的一个值赋给i
for (i <- to )
println(i)
//for(i <- 数组)
val arr = Array("a", "b", "c")
for (i <- arr)
println(i)
//高级for循环
//每个生成器都可以带一个条件,if前面没有分号
for(i <- to ; j <- to if i != j)
print(( * i + j) + " ")
println()
//for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合
//每次迭代生成集合中的一个值,将i的值进行操作,将数据装入vector中。如果对数组进行操作,最后结果返回一个数组。
val v = for (i <- to ) yield i *
println(v)
}
}
练习:将一个1到9的数据中的偶数取出来。
//使用val更加的节省资源
val a1=Array(,,,,,,,,)
val a1=for(i<- a1;if(i%==)) yield i
练习:filter过滤
a1.filter(_%==)
_表示每次输出的值
for循环通过角标开始
for(i <- to a1.length)
println(a1(i-))
for(i <- until a1.length)
println(a1(i))
to是[]的操作,until是(]的操作
1 to 10 等同于 1.to(10)
5.在scala中是不存在操作符运算的,运算的底层都是使用方法来完成的。
scala>-
res1:Int = - scala>.-()
res2:Double = -2.0
对于为什么返回的是一个double,这是因为它将第一个1当做是double运算的,所以后来大印的就是double。
测试方法:将3定义成一个val a的值,1.-(a)结果仍为double,将1定义为一个val b的值,a.-(b)结果是int。
在源码中,方法的返回的类型和输入的参数是和传入参数有关的。
6.方法和函数
方法定义 def 方法名(参数列表):返回值类型 = 操作
方法定义:
def m1(a:Int,b:Int):Int = x*y
方法调用
m1(,) 不写返回值的类型
def m1(a:Int,b:Int) = x*y 注意:但是递归是必须要有返回值类型的。
7.函数定义
定义一个函数,无名函数
(x:Int,y:Int)=>{x+y} 有名函数
val f1=(x:Int,y:Int)=>{x+y} 调用
f1(参数)
8.函数有一个特性就是可以作为参数传入到方法里面。
定义一个函数
val f3=(x:int)=>x*
准备一个数组,将数组的值进行函数f3的操作
val a1=Array(,,,,,,,,)
a1.map(f3)
这也就是说函数式编程可以将数据的进行任意操作,这也是他的灵活性。
9.方法是通过方法名进行调用,函数是可以作为参数进行传递的。
10.a1.map(_*100) 将a1中数据乘以10.这个是不定义函数,也可以定义匿名函数
匿名函数 a1.map((x:Int)=>x*) 但是在a1中的参数都是知道的,这个时候就不需要指定数据的类型
a1.map(x=>x*10) 当然了最简单的方式是
a1.map(_*100)
11.下划线的作用
将方法转化为函数,如果一个函数的逻辑和方法的逻辑相同,那么就可以使用下面的方法将方法转换为函数。
def testZhanshu(x:Int,y:Int):Int = {
X+y;
}
将上面的方法转换为函数
Val fun2 = testZhanshu_
总结:
函数和方法的最大区别在于,函数可以作为参数进行传递。
定义函数的方式
Val fun=(x:Int,y:Int)=>操作
Val fun1 = (x:Int,y:Int)=>返回值[可以为任意的,可以是一个元祖 返回值类型是可以设置的,也可以不需要设置的,因为元函数的返回值是可以自己推断出来的。] ={操作}
Val fun2:(Int,Double)=>(Double,Int)={(x,y[因为只是将前面数据的定义了,但是并没有定义变量,所以这里的需要将变量定义出来。])=>具体的业务逻辑}
递归必须有返回值类型的
加入说没有返回值的时候,这个时候返回值是Unit,调用之后,返回值是一个()
Scala基础知识(二)的更多相关文章
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- 菜鸟脱壳之脱壳的基础知识(二) ——DUMP的原理
菜鸟脱壳之脱壳的基础知识(二)——DUMP的原理当外壳的执行完毕后,会跳到原来的程序的入口点,即Entry Point,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向O ...
- Dapper基础知识二
在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. 2,如何使用Dapper? 首先Dapper是支持多种数据库的 ...
- python基础知识(二)
python基础知识(二) 字符串格式化 格式: % 类型 ---- > ' %类型 ' %(数据) %s 字符串 print(' %s is boy'%('tom')) ----> ...
- Java基础知识二次学习--第三章 面向对象
第三章 面向对象 时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...
- Java基础知识二次学习-- 第一章 java基础
基础知识有时候感觉时间长似乎有点生疏,正好这几天有时间有机会,就决定重新做一轮二次学习,挑重避轻 回过头来重新整理基础知识,能收获到之前不少遗漏的,所以这一次就称作查漏补缺吧!废话不多说,开始! 第一 ...
- scala 基础知识总结
在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logge ...
- SCALA基础知识学习
注:本文只说和Java不同的地方. 总结自: Scala详细教程 Scala教程 scala基础语法 Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ";" 是 ...
- 快速掌握JavaScript面试基础知识(二)
译者按: 总结了大量JavaScript基本知识点,很有用! 原文: The Definitive JavaScript Handbook for your next developer interv ...
- Scala基础知识[一]
摘要:在Scala 是 Scalable Language 的简写,是一门多范式(multi-paradigm)的编程语言.设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Jav ...
随机推荐
- Linux经常使用命令(十六) - whereis
whereis命令仅仅能用于程序名的搜索(程序安装在哪?).并且仅仅搜索二进制文件(參数-b).man说明文件(參数-m)和源码文件(參数-s). 假设省略參数,则返回全部信息. 和find相比.wh ...
- Typedef和#define之间的区别
Typedef和define都可以用来给对象取一个别名,但是两者却有着很大不同. 1. 首先,二者执行时间不同 关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能 ...
- 深入理解Android(1)——理解Android中的JNI(上)
我参加了CSDN博客之星评选,如果在过去的一段时间里阳光小强的博客对你有所帮助,在这里希望能投上您宝贵的一票,每天都可以投一次:http://vote.blog.csdn.net/blogstar20 ...
- vue中 v-cloak 的用法
原文来自:http://www.sunzhongwei.com/hide-vuejs-variable-with-v-cloak-when-page-loading
- php开启openssl扩展
windows下开启方法: 1: 首先检查php.ini中:extension=php_openssl.dll是否存在, 如果存在的话去掉前面的注释符‘:’, 如果不存在这行,那么添加extensio ...
- PatentTips - Control register access virtualization performance improvement
BACKGROUND OF THE INVENTION A conventional virtual-machine monitor (VMM) typically runs on a compute ...
- 使WordPress改域名后网站正常运行的方法
使WordPress改域名后网站正常运行的方法 wp-content/wp-config.php $path = '/blog'; $scheme = (isset($_SERVER['HTTPS'] ...
- screen-调节屏幕亮度
今天做项目的时候,需要实现一个功能,就是进入一个应用,在这个应用中,屏幕的亮度变为最亮.关键代码如下 bt1.setOnClickListener(new OnClickListener() { @O ...
- IIS特殊字符设置
简介:[iis7]请求筛选模块被配置为拒绝包含双重转义序列的请求.HTTP 错误 404.11 - Not Found 特殊字符最好替换成其他的字符,主要的特殊字符有”*”.”&”.”%”.” ...
- BZOJ3160: 万径人踪灭(FFT,回文自动机)
BZOJ传送门: 解题思路: FFT在处理卷积时可以将自己与自己卷,在某一种字母上标1其他标0,做字符集次就好了. (回文就是直接对称可以联系偶函数定义理解,根据这个性质就可以将字符串反向实现字符串匹 ...