scala學習之scala函式

scala學習之scala函式

scala函式

在scala中,方法和函式幾乎可以等同(定義、使用、執行機制都一樣的),只是函式的使用方式更加的靈活多樣,函式像變數一樣,既可以作為函式的引數使用,也可以將函式賦值給一個變數,函式的建立不用依賴於類或者物件,而在Java當中,函式的建立則要依賴於類、抽象類或者介面

基本語法

// 函式宣告的關鍵字是defdef 函式名 ([引數名: 引數型別], 。。。)[[: 返回值型別] =] { 函式體return 返回值 }

函式可以有返回值,也可以沒有

返回值形式1 指明返回值型別,使用:返回值型別=

def add(a: Int, b: Int): Int = { return a + b; }

返回值形式2 =表示返回值型別不確定,使用型別推導完成 (在這裡注意返回值不能明確使用return,否則無法進行自動推斷,必須使用:返回值型別= 來明確指出返回值型別)

def add1(a: Int, b: Int) = { a + b; }

返回值形式3 表示沒有返回值,return不生效

def add2(a: Int, b: Int) { a + b; }

// 把一個函式賦給一個變數,但是並不執行函式 val f2 = add _

函式引數

scala函式如果不存在形參列表的話,呼叫時可以省略()

scala函式宣告時引數可以設定預設值,在呼叫時如果沒有指定實參,會使用預設值,如果指定了實參,則會覆蓋預設值(預設從左到右覆蓋),也可以指定帶名引數指定覆蓋某個預設值

// 指定預設值 def connect(host: String = “localhost”, port: Int = 3306, user: String = “root”, password: String = “root”) = { println(“host:” + host + “,port:” + port + “,user:” + user + “,password:” + password) } //host:localhost,port:3306,user:root,password:root connect() //從左到右賦值 // host:127。0。0。1,port:12423,user:root,password:root connect(“127。0。0。1”,12423) // 帶名引數指定覆蓋 // host:localhost,port:3306,user:root,password:123456 connect(password = “123456”)

scala函式中的形參預設是val的,不允許在函式中修改

scala中也有可變引數,java中使用的是…,而在scala中使用的是*,同樣的,如果同時存在多個引數,可變引數要放在形參列表的最後

// 可變引數 *-parameter must come last // 0到n個引數 def fun(args:Int*): Unit ={ println(args) }