更新時間:2021-03-08 來源:黑馬程序員 瀏覽量:
在Scala中,它和Java一樣也是擁有方法和函數(shù)。Scala的方法是類的一部分,而函數(shù)是一個對象可以賦值給一個變量。換句話來說,在類中定義的函數(shù)即是方法。
Scala 中可以使用 def語句和val 語句定義函數(shù),而定義方法只能使用def 語句。下面我們分別對Scala的方法和函數(shù)進行講解。
1.方法
Scala方法的定義格式如下:
def functionName ([參數(shù)列表]):[return type]={ function body return [expr]}
在上面代碼中可以看出,Scala的方法是由多個部分組成。具體如下:
def:是Scala方法的關鍵字,并且是固定不變的,一個方法的定義是由def關鍵字開始的。functionName:是Scala 方法的方法名。([參數(shù)列表]):[return type]:是Scala方法的可選參數(shù)列表,每個參數(shù)列表中的每個參數(shù)都有一個名字,參數(shù)名后跟著冒號和參數(shù)類型。function body:是方法的主體。return [expr]:是Scala方法的返回類型,可以是任意合法的 Scala 數(shù)據(jù)類型。若沒有返回值,則返回類型為“Unit”。
下面,定義一個方法add,實現(xiàn)兩個數(shù)相加求和,示例代碼如下:
def add(a:Int,b:Int):Int={ var sum:Int = 0 sum = a + b return sum }
Scala的方法調用的格式如下:
//沒有使用實例的對象調用格式 functionName(參數(shù)列表) //方法使用實例的對象來調用,我們可以使用類似java的格式 (使用“.”號) [instance.]functionName( 參數(shù)列表 )
下面,在類Test中,定義一個方法addInt,實現(xiàn)兩個整數(shù)相加求和。在這里,我們通過“類名.方法名(參數(shù)列表)”來進行調用,示例代碼如下:
scala> :paste # 多行輸入模式的命令 // Entering paste mode (ctrl-D to finish) object Test{ def addInt(a:Int,b:Int):Int={ var sum:Int=0 sum=a+b return sum } } // Exiting paste mode, now interpreting. defined object Test scala> **Test.addInt(4,5)** res0: Int = 9
2.函數(shù)
在Scala中,由于使用def語句定義函數(shù)的格式以及調用函數(shù)的格式均與方法一樣,因此,這里不做贅述。然而,Scala函數(shù)也是有區(qū)別于方法的,可以使用val語句定義函數(shù)的格式,并且函數(shù)必須要有參數(shù)列表,而方法可以沒有參數(shù)列表。接下來,我們來介紹使用val語句定義和調用函數(shù)的具體格式。
Scala函數(shù)的定義格式如下:
val functionName ([參數(shù)列表]) => function body }
下面,定義一個函數(shù)addInt,實現(xiàn)兩個整數(shù)相加求和,示例代碼如下:
val addInt( a:Int, b:Int )=>a+b
3.方法轉換成函數(shù)
方法轉換成函數(shù)的格式如下:
val f1 = m _
在上述的格式中,方法名m后面緊跟一個空格和下劃線,是為了告知編譯器將方法m轉換成函數(shù),而不是要調用這個方法。下面,定義一個方法m,實現(xiàn)將方法m轉成函數(shù),示例代碼如下:
scala> def m(x:Int,y:Int):Int =x*y # 方法 m: (x: Int,y: Int)Int scala> **val f=m _** f:(Int,Int) => Int = (function2) # 函數(shù) }
小提示:
Scala方法的返回值類型可以不寫,編譯器可以自動推斷出來,但是對于遞歸函數(shù)來說,必須要指定返回類型。
猜你喜歡: