1.For与function进阶实战
package
com.jn.scala.hello
/**
* @author jiangning
*/
object
For_Function_Advanced
{
def
main
(
args
: Array[
String
]){
// 1. 可以同时写两个变量,中间用分号隔开
// 不需要在这里申明i,j的类型, scala会自动辨认
for
(
i
<-
1
to
2
;
j
<-
1
to
2
)
print
((
100
*
i
+
j
)
+
" "
)
println
// 2. 在for的括号内还可以添加判断
for
(
i
<-
1
to
2
;
j
<-
1
to
2
if
(
i
!=
j
))
print
((
100
*
i
+
j
)
+
" "
)
println
// 3.有方法名的函数,addA方法名,x为参数名,x+100是方法内的计算
// 函数一定时有值的,a函数可以作为一个参数传给b函数
def
addA
(
x
: Int) =
x
+
100
// 4.add变量名字,(x : Int)是匿名函数,x+100在匿名函数内的计算
// 关心函数中间的算法,不关心函数叫什么名字,
// 将函数赋值给一个常量,
// 没有写返回值的类型,一般 scala会根据右边的表达式,知道返回值类型。
val
add
= (x : Int) =>
x
+
100
println
(
"The result from a function is :"
+
addA
(
2
))
println
(
"The result from a val is :"
+
add
(
2
))
// 5.递归运行中一定要有返回值类型的指定,其他可以不知道返回值类型
// 下面是斐波那契数列计算
def
fac
(
n
: Int): Int =
if
(
n
<=
0
)
1
else
n
*
fac
(
n
-
1
)
println
(
"The result from a fac is :"
+
fac
(
3
))
// 6.参数可以有初始值,当参数传入值的时候,默认值被替换
def
combine
(
content
:
String
,
left
:
String
=
"["
,
right
:
String
=
"]"
)=
left
+
content
+
right
println
(
"The result from a combine is :"
+
combine
(
"I love Spark"
))
println
(
"The result from a combine is :"
+
combine
(
"I love Spark"
,
"<<"
))
// 7.可变参数,最后一行的返回值,要写result,最后一个表达式就是返回值
def
connected
(
args
: Int*)={
var
result
=
0
for
(
arg
<-
args
)
result
+=
arg
result
}
println
(
"The result from a connected is :"
+
connected
(
1
,
2
,
3
,
4
,
5
))
println
(
"The result from a connected is :"
+
connected
(
1
,
2
,
3
,
4
,
5
,
6
))
}
}
2.lazy加载
package
com.jn.scala.hello
import
scala.io.Source
/**
* @author jiangning
*/
object
LazyOps
{
def
main
(
args
: Array[
String
]){
// 1.下面这句后,会抛出异常,然后无法进行打印,
// val file2 = Source.fromFile("d://jiangningtest.txt")
// println("Scala")
// 2.这里是延迟执行,懒加载, Hibernate中有类似这样的处理。
lazy
val
file
=
Source
.
fromFile
(
"d://jiangningtest.txt"
)
println
(
"Can print Scala"
)
}
}