Scala基本概念(三)——函数

来源:互联网 发布:通达信电脑炒股软件 编辑:程序博客网 时间:2024/06/10 18:36

Scala中定义函数需要给出函数的名称、参数和函数体。只要函数不是递归的,就不需要指定返回类型。

1、默认参数和 带名参数

scala> def decorate(str: String, left: String ="[",right:String="]")=left + str + right
decorate: (str: String, left: String, right: String)String

scala> decorate("Hello")
res4: String = [Hello]

该函数有两个参数,left和right,带有默认值"["和"]"。
也可以在提供参数的时候指定参数的名称,如下。
scala> decorate("Hello","<<<",">>>")
res3: String = <<<Hello>>>

如下参数是带名参数

scala> decorate(str="Hello",left="<<<",right=">>>")
res5: String = <<<Hello>>>

2、变长参数

scala> def sum(args: Int*) = {
     | var result = 0
     | for(arg <- args) result += arg
     | result
     | }
sum: (args: Int*)Int
scala> val s = sum(1, 2, 3, 4, 5, 6)
s: Int = 21

参数被当做参数序列处理,需要追加:_*

scala> val s = sum(1 to 6:_*)
s: Int = 21

3、过程

如果函数体包含在花括号中但没有前面的=号,那么返回类型就是Unit,这样的函数被称为过程(procedure),过程不返回值。

scala> def box(s: String){// 没有“=”
     | var border = "-" * s.length + "--\n"
     | println(border + "|" + s + "|\n" + border)
     | }
box: (s: String)Unit

scala> box("Scala")
-------
|Scala|
-------

声明返回类型的写法

scala> def box(s: String):Unit = {
     | var border = "-" * s.length + "--\n"
     | println(border + "|" + s + "|\n" + border)
     | }

4、懒值

当val被声明为lazy时,它的初始化将会被推迟,直到我们首次对它取值。

scala> lazy val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString //该函数的功能是打开指定路径/usr/share/dict/words下的内容 
words: String = <lazy>

懒值是介于val和def的中间状态

 val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString  // 在words被定义时即被取值

 lazy val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString // 在words被首次使用时取值

 def words = scala.io.Source.fromFile("/usr/share/dict/words").mkString  // 在每一次words被使用时取值


0 0
原创粉丝点击