scala基础篇·函数定义
object TestFunction {
def main(args: Array[String]): Unit = {
println(abs(2))
println(abs(-2))
println(recursive(-10))
println(recursive(4))
countDownPrint(9)
println(defaultParams("aaaa"))
println(defaultParams("bbbb", "|", "|"))
println(defaultParams(str = "cccc", end = "<<", start = ">>"))
println(sum(1, 2, 3, 4, 5))
//不能传序列为参数
//println(sum(1 to 5))
//但是可以使用 : _* 将参数当作序列处理
println(sum(1 to 5: _*))
println(empty())
lazyLoad()
}
def p(): Unit = {
}
/**
* 绝对值函数
*
* @param num
* @return
*/
def abs(num: Int): Int = {
if (num >= 0) num else -num
}
/**
* 递归
*
* @param end
* @return
*/
def recursive(end: Int): Int = {
if (end <= 0) 1 else end * recursive(end - 1)
}
/**
* 递归打印
*
* @param end
*/
def countDownPrint(end: Int): Unit = {
if (end == 0) {
println(0)
} else {
print(end)
countDownPrint(end - 1)
}
}
/**
* 默认值函数
*
* @param str
* @param start
* @param end
* @return
*/
def defaultParams(str: String, start: String = "[", end: String = "]"): String = {
start + str + end
}
/**
* 不定长参数
*
* @param numbers
* @return
*/
def sum(numbers: Int*): Int = {
var sum = 0
for (i <- numbers) sum += i
sum
}
/**
* 空表达式返回()
*/
def empty(): Unit = {
}
/**
* 懒加载
*/
def lazyLoad(): Unit = {
lazy val str = scala.io.Source.fromFile("").mkString
println("懒加载,直到被用到时才会被加载,但是每次访问时,都会调用一个方法,以线程安全的形式检查该lazy是否被初始化,有利有弊")
println(str)
}
}
运行结果如下:
2
2
1
24
9876543210
[aaaa]
|bbbb|
>>cccc<<
15
15
()
懒加载,直到被用到时才会被加载,但是每次访问时,都会调用一个方法,以线程安全的形式检查该lazy是否被初始化,有利有弊
Exception in thread "main" java.io.FileNotFoundException: (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at scala.io.Source$.fromFile(Source.scala:91)
at scala.io.Source$.fromFile(Source.scala:76)
at scala.io.Source$.fromFile(Source.scala:54)
at base.TestFunction$.str$lzycompute$1(TestFunction.scala:100)
at base.TestFunction$.str$1(TestFunction.scala:100)
at base.TestFunction$.lazyLoad(TestFunction.scala:102)
at base.TestFunction$.main(TestFunction.scala:29)
at base.TestFunction.main(TestFunction.scala)