函式是一組一起執行乙個任務的語句。
函式的宣告:如果你不寫等於號和方法主體,那麼方法會被隱式宣告為」抽象(abstract)」,包含它的型別於是也是乙個抽象型別。
def
functionname
([引數列表]) : [return type]
函式的使用:傳名函式
//通過指定函式引數名,並且不需要按照順序向函式傳遞引數
divided(b = 2, a = 4)//result 2
def divided(a: int, b: int)
結果:4除以2=2
可變引數的函式
//可變引數 引數的型別之後放乙個星號來設定可變引數(可重複的引數)
def variableparam(x: int, strs: string*)
}
結果
可變引數長度:5遞迴函式:arg[0]=vivo
arg[1]=oppo
arg[2]=huawei
arg[4]=lenovo
def
actorial
(x: int): int = else
} val result = actorial(5)
println("5的階乘是" + result)
結果:5的階乘是120
預設引數值
//scala 可以為函式引數指定預設引數值,使用了預設引數,你在呼叫函式的過程中可以不需要傳遞引數,
//這時函式就會呼叫它的預設引數值,如果傳遞了引數,則傳遞值會取代預設值。
def defaultparam(x: int = 5, y: int = 4)
defaultparam(3, 5)
//帶引數呼叫
defaultparam()
//不帶引數呼叫
結果:
3
*5=15
5*4=20
傳名呼叫
def callbyname(arg: => string)
def innerfun()
: string =
callbyname(innerfun())
結果
callbyname,呼叫了
innerfun呼叫了
callbyname,呼叫了,引數是hello scala
// 高階函式(higher-order function)就是操作其他函式的函式。
//scala 中允許使用高階函式, 高階函式可以使用其他函式作為引數,或者使用函式作為輸出結果
def fun1(fu: int => string, arg: int) = fu(arg)
def intride2tostring(arg: int): string =arg+ "*2="+ (arg * 2)
println( fun1(intride2tostring,10))
結果:10*2=20
函式巢狀
def
nestfun
(x : int):int=
innerfun(x,2)
} println(nestfun(6))
結果:12
匿名函式:scala 中定義匿名函式的語法很簡單,箭頭左邊是引數列表, 右邊是函式體,引數的型別是可省略的,scala 的型別推測系統會推測出引數
var
userdir = ()=> //不帶引數的匿名函式
varsum = (x:int,y:int)=>
println(userdir)
var sumresult = sum(1,2)
println(sumresult)
結果:3
偏應用函式:
scala 偏應用函式是一種表示式,你不需要提供函式需要的所有引數,只需要提供部分,或不提供所需引數。使用偏應用函式優化以上方法,繫結第乙個引數,第二個引數使用下劃線(_)替換缺失的引數列表,並把這個新的函式值的索引的賦給變數
def
sumfun
(x:int,y:int):int =
var x = 2
var sumfunresult = sumfun(x,_ :int)
println(sumfunresult(5))
結果:10
柯里化(currying)指的是將原來接受兩個引數的函式變成新的接受乙個引數的函式的過程。新的函式返回乙個以原有第二個引數為引數的函式。
def strcat(s1: string)(s2: string) =
var s1 = "hello"
var s2 = "scala"
println(strcat(s1)(s2))
結果:hello scala scala學習筆記 理解函式
定義乙個函式 scala def foo x int x 2 foo x int int可以採用匿名引數 scala def foo int int 2 foo int int這個函式的型別是int int scala var bar foo bar int int scala var bar in...
scala學習筆記 高階函式
scala混合了物件導向和函式式的特性。在函式式程式語言裡,函式是 頭等公民 也就是說函式很重要,它可以像任何其他資料型別一樣被傳遞和操作。也就是說,函式可以作為乙個值傳給乙個變數。在scala中,函式是 頭等公民 就和數字一樣。可以在變數中存放函式 val a ceil val b sqrt 當然...
Scala學習筆記 函式特性
一 傳名與傳值的區別 在進入函式內部前,傳值呼叫方式就已經將引數表示式的值計算完畢,而傳名呼叫是在函式內部進行引數表示式的值計算的。這就造成一種現象,每次使用傳名呼叫時,直譯器都會計算一次表示式值。二 引數傳遞的時候也具有指定引數名的能力。三 scala允許指明函式的最後乙個引數可以是重複的,即我們...