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

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被使用時取值


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章