码迷,mamicode.com
首页 > 其他好文 > 详细

scala学习第二章

时间:2015-08-19 16:47:52      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:scala

在scala中可以将if/else表达式的值赋值给一个变量 例如: val s = if(x > 0) 1 else o

var sum = 0;
val s == "hello"
for(i <- 0 to s.until s.length)//until 方法返回一个并不包含上限的区间
	sum += s(i)

也可以不需要使用下标

var sum = 0
for(ch <- "Hello") sum += ch

每个生成器都可以带一个守卫, 以if开头的Boolean表达式

<pre name="code" class="java">for(i <- 1 to 3; j <- 1 to 3 if i !- j) println((i*10 + j) + " ")
//将打印 12 13 21 23 31 32
//注意if 前面没有分号

如果循环体的循环以yield 开始,则该循环会构造出一个新的集合,每次迭代生成集合中的一个值

for(i <- 1 to 10) yield i % 3
//生成Vector(1,2,0,1,2,0,1,2,0,1)


fort推导式和它的第一个生成器是类型兼容的

for(c <- 'Hello"; i <- 0 to 1) yield (c + i).toCHar
//将生成"HIeflmlmop"
for(i <- 0 to 1; c <- "Hello") yield (c+i).toChar
//将生成Vector('H','e','l','l','o','I','f','m','m','p')


scala中除了支持方法,还支持函数,方法对对象进行操作,函数不是.

定义函数,需要给出函数的名称,参数,函数体,例如:

def abs(x: Double) = if(x > 0) x else -x
//只要函数不是递归的,你就不需要指定返回类型,scala编译器可以通过=符号右边表达式的类型推断出返回类型

如果函数需要多个表达式完成,可以用代码块,代码块中最后一个表达式的值就是函数的返回值

def fac(x : Int) = {
	var r = 1
	for(i <- i to n) r = r * i
	r
}

对于递归函数我们必须指定返回类型. 例如:

def fac(x : Int) : Int = if(n <= 0) 1 else n * fac(n - 1)
//如果没有返回类型,scala编译器无法校验n * fac(n-1)的类型
实现一个可以接受可变长参数列表的函数


val s = sum (1,2,3,4,5)

函数会得到一个类型为Seq的参数


版权声明:本文为博主原创文章,未经博主允许不得转载。

scala学习第二章

标签:scala

原文地址:http://blog.csdn.net/u012762573/article/details/47780497

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!