scala学习笔记
2015-12-21 20:29
357 查看
笔记基于http://blog.csdn.net/mapdigit/article/details/21878083总结,感谢引路蜂大神1-3讲Scala定义了两种类型的变量val和var,val类似于Java中的final变量,一旦初始化之后,不可以重新赋值Scala
可以根据赋值的内容推算出变量的类型:
与下面等效查看源代码打印帮助
Scala既是面向对象的编程语言,也是面向函数的编程语言,因此函数在Scala语言中的地位和类是同等第一位的每个Scala函数都有返回值,只是有些返回值类型为Unit,类似为void类型每个Scala表达式都有返回结果(这一点和Java,C#等语言不同),比如Scala的
ifelse语句也是有返回值的,因此函数返回结果无需使用return语句。实际上在Scala代码应当尽量避免使用return语句。函数的最后一个表达式的值就可以作为函数的结果作为返回值Scala本身是设计用来编写大型应用的Scala不支持 ++i,i++
运算符,因此需要使用i+=1来加一Scala访问数组的语法是使用()而非[].如果一个函数只有一个参数并且只包含一个表达式,那么你无需明确指明参数:
lambda表达式
<-
调用的为整数类型的to方法,to方法使用一个参数[/code]
方法,也就是greetStrings.update(0,”hello”).Scala也是一个面向函数的编程语言,面向函数的编程语言的一个特点是,调用某个方法不应该有任何副作用,参数一定,调用该方法后,返回一定的结果,而不会去修改程序的其它状态(副作用)数组的元素是可以被修改的。如果需要使用不可以修改的序列,Scala中提供了Lists类。和Java的List不同,Scala的Lists对象是不可修改的valoneTwo=List(1,2)valthreeFour=List(3,4)valoneTwoThreeFour=oneTwo:::threeFourprintln(oneTwo+"and"+threeFour+"werenotmutated.")
//List(1,2)andList(3,4)werenotmutated.println("Thus,"+oneTwoThreeFour+"isanewlist")//Thus,List(1,2,3,4)isanewlist联结两个list
三个冒号“:::”,向list中添加元素两个冒号“::”::方法(操作符)是右操作符,也就是使用::右边的对象来调用它的::方法,Scala中规定所有以:开头的操作符都是右操作符,因此如果你自己定义以:开头的方法(操作符)也是右操作符。
调用空列表对象Nil的::方法也就是
Tuples,和List不同的Tuples可以包含不同类型的数据,而List只能包含同类型的数据使用._和索引来访问员组的元素
目前Scala支持的元祖的最大长度为22Trait的概念类似于Java中的Interface,所不同的Scala中的Trait可以有方法的实现Scala
API定义了Set的基Trait类型Set,分两个包定义Mutable(可变)和Immutable(不可变),缺省情况Set为Immutable
Set认识哪种是指令编程,哪种是函数式编程:如果代码中含有var类型的变量,这段代码就是传统的指令式编程,如果代码只有val变量,这段代码就很有可能是函数式代码指令式编程:
函数式编程:
或者更简化为:查看源代码打印帮助
读取E:\logs\error.log文件内容:
可以根据赋值的内容推算出变量的类型:
val msg = "Hello,World" |
2 | msg : String = Hello,World |
val
msg
2
:
String
=
"Hello again,world"Scala语句也不需要以分号结尾如果在命令行中需要分多行输入,Scala解释器在新行前面显示“|”,表示该行接着上一行。比如
1 | scala> val msg 3 = |
2 | | "Hello world3rdtime" |
3 | msg 3 : String = Hello world 3 rd time |
ifelse语句也是有返回值的,因此函数返回结果无需使用return语句。实际上在Scala代码应当尽量避免使用return语句。函数的最后一个表达式的值就可以作为函数的结果作为返回值Scala本身是设计用来编写大型应用的Scala不支持 ++i,i++
运算符,因此需要使用i+=1来加一Scala访问数组的语法是使用()而非[].如果一个函数只有一个参数并且只包含一个表达式,那么你无需明确指明参数:
args.foreach(arg
=
> println(arg))=========args.foreach(println)==========
1 | for (arg <-args) |
2 | println(arg) |
Scala使用方括号来指明数据类型参数,而非尖括号:
valgreetStrings=newArray[String](3)//等价于valgreetStrings=Array("Hello",",","World\n"),等价于valgreetStrings=Array.apply("Hello",",","World\n")
greetStrings(0)="Hello"
如果一个方法只有一个参数,你可以不用括号和. 来调用这个方法:[code](ifor
<-
0
to
2
)print(greetStrings(i)),(0).to(2)
调用的为整数类型的to方法,to方法使用一个参数[/code]
Scala中所有的基本数据类型也是对象(和Java不同),因此0
可以有方法
1+2
,最终解释为(1).+(2)
在Scala中,当你在某个值后面使用()时,Scala将其翻译成对应对象的apply方法如果对某个使用()的对象赋值,比如:
greetStrings(
0
)
=
"Hello",Scala将这种赋值转换为该对象的update
方法,也就是greetStrings.update(0,”hello”).Scala也是一个面向函数的编程语言,面向函数的编程语言的一个特点是,调用某个方法不应该有任何副作用,参数一定,调用该方法后,返回一定的结果,而不会去修改程序的其它状态(副作用)数组的元素是可以被修改的。如果需要使用不可以修改的序列,Scala中提供了Lists类。和Java的List不同,Scala的Lists对象是不可修改的valoneTwo=List(1,2)valthreeFour=List(3,4)valoneTwoThreeFour=oneTwo:::threeFourprintln(oneTwo+"and"+threeFour+"werenotmutated.")
//List(1,2)andList(3,4)werenotmutated.println("Thus,"+oneTwoThreeFour+"isanewlist")//Thus,List(1,2,3,4)isanewlist联结两个list
三个冒号“:::”,向list中添加元素两个冒号“::”::方法(操作符)是右操作符,也就是使用::右边的对象来调用它的::方法,Scala中规定所有以:开头的操作符都是右操作符,因此如果你自己定义以:开头的方法(操作符)也是右操作符。
1 | val oneTowThree = 1 :: 2 :: 3 :: Nil |
2 | println(oneTowThree) |
1 | val oneTowThree = Nil. :: ( 3 ). :: ( 2 ). :: ( 1 ) |
1 | val pair = ( 99 , "Luftballons" ) |
2 | println(pair. _ 1 ) |
3 | println(pair. _ 2 ) |
API定义了Set的基Trait类型Set,分两个包定义Mutable(可变)和Immutable(不可变),缺省情况Set为Immutable
Set认识哪种是指令编程,哪种是函数式编程:如果代码中含有var类型的变量,这段代码就是传统的指令式编程,如果代码只有val变量,这段代码就很有可能是函数式代码指令式编程:
1 | def printArgs (args : Array[String]) : Unit = { |
2 | var i = 0 |
3 | while (i |
4 | println (args(i)) |
5 | i+ = 1 |
6 | } |
7 | } |
1 | def printArgs (args : Array[String]) : Unit = { |
2 | for ( arg<-args) |
3 | println(arg) |
4 | } |
1 | def printArgs (args : Array[String]) : Unit = { |
2 | args.foreach(println) |
3 | } |
for ( ).getLines()) |
1 | println(line.length " " + line) |
相关文章推荐
- LevelDb日知录之四: SSTable文件
- Android 仿微信支付密码输入框
- Android Service两种启动方式
- 2015浙江理工校赛 E Power Eggs (DP)
- String Game【ZSTUOJ--4212】
- 论文笔记:《the Google File System》
- [GDOI模拟2015.12.19][HEOI2013]SAO
- git常用指令合集
- java web 开发技术应用-过滤器
- Git使用教程
- LeetCode Valid Parentheses
- 图形学优化_3: 责任链模式和迭代器模式
- 抽象思维实现各种不同的接口调用
- 论文笔记:《Google MapReduce》
- 求助大神
- 轻松学习JavaScript二十三:DOM编程学习之操作表格
- 自定义剪切板,UIMenuController的使用
- cocos2D-x 3.5 引擎解析之--引用计数(Ref),自己主动释放池(PoolManager),自己主动释放池管理器( AutoreleasePool)
- DrawRect
- android开发中遇到的异常总结