###Scala的基础知识
scala中对变量有两种定义:
- val: 适用于那些不变的变量,简单的理解为final就行了。
- var: 适用于变量
scala中有7种类型:Byte, Char, Short, Int, Long, Float, Double, Boolean。但是在scala中并不区分基本类型和引用类型(java区分)。这使得可以对数字使用方法,如1.toString()
由于scala没有++和–操作,于是需要用+=1 或者 -=1。
在scala中_是个通配符,类似于java中的*,如import scala.math._
scala没有静态方法,但是它有单例对象。
没有参数且不改变当前对象的方法,调用的时候不带括号。
带有apply方法,例如"hello"(4)//输出o
,这就是对字符串apply了charAt方法
更多用法看api:www.scala-lang.org/api。
###Scala控制结构
if 与java或者C++中的语法一样,但是多了一个功能,可以带值
val s = if (x > 0) 1 else 0
与if(x > 0) s =1 else s = 0
的效果是一样的。
可如果是val s = if(x > 0) 1
,那么返回的类型为AnyVal
而不是Int
,因为else
语句为空。
没有switch
结构
并不需要分号,除非是一行内写多个语句
{}块用来包含一系列的表达式,返回结果为最后一个表达式的值
如果某个val需要多步初始化才行,可以val distance = { val dx = x - x0; val dy = y - y0; sqrt(dx * dx + dy * dy) }
printf("xx %s, %d", "a", 2)
跟c语言中一样
没有 for(int a = 0; a < 10; a++)这样的循环,只有while,do,foreach循环。
没有break和continue,可以用Boolean搞定,或者Breaks的break
如果在循环中使用yield会生成集合,如:for(i<-1 to 10) yield i %3
会生成Vector(1, 2, 0, 1, 2, 0, 1,2,0,1 ,2)
只要函数不是递归的,不需要指定返回类型,最后的值就是返回值
def fac(n: Int) = { var r = 1; r}
也可以用return直接返回
若是递归则必须指明def fac(n:Int):Int = {xxx}
###在Idea中使用scala
Coursera: https://class.coursera.org/progfun-003/assignment/view?assignment_id=2
Functional Programming Principles in Scala