變量:
Scala在定義一個(gè)變量時(shí),必須在其變量名前添加關(guān)鍵字“var”或“val”這兩者的區(qū)別是“var”修飾的變量可以新賦值,并把原值拋棄,而用了“val”修飾的變量,則被禁止重新賦值。前者在定義后只可以修改,而后者是只能讀不能寫的變量。
在定義變量時(shí),Scala推薦的變量名命名方式是“駝峰命名法”,每個(gè)單詞的首字母大寫,變量名和函數(shù)名以小寫字母開(kāi)頭,類、對(duì)象和特質(zhì)以大寫字母開(kāi)頭。首次定義變量時(shí)就要給予具體的值來(lái)初始化。
在“var”類型重新賦值時(shí),新值和舊值是同一類型,否則就會(huì)發(fā)生類型匹配錯(cuò)誤
由于Scala是函數(shù)式編程,函數(shù)式編程的思想之一就是傳入函數(shù)的參數(shù)不應(yīng)該被改變,所以Scala提倡建議val型變量。
函數(shù):
Scala的函數(shù)定義以“def”開(kāi)頭,然后是一個(gè)自定義的函數(shù)名(推薦駝峰命名法),接著是用圓括號(hào)“( )”包起來(lái)的參數(shù)列表。在參數(shù)列表里,多個(gè)參數(shù)用逗號(hào)隔開(kāi),并且每個(gè)參數(shù)名后面要緊跟一個(gè)冒號(hào)以及顯式聲明的參數(shù)類型,因?yàn)榫幾g器在編譯期間無(wú)法推斷出入?yún)㈩愋汀懲陞?shù)列表后,應(yīng)該緊跟一個(gè)冒號(hào),再添加函數(shù)返回結(jié)果的類型。最后,再寫一個(gè)等號(hào)“=”,等號(hào)后面是用花括號(hào)“{ }”包起來(lái)的函數(shù)體。例如:
用“def”開(kāi)始函數(shù)定義
| 函數(shù)名
||參數(shù)及參數(shù)類型
|||函數(shù)返回結(jié)果的類型
||||等號(hào)
|||||
def max(x: Int, y: Int): Int = {
if(x > y)
x
else|
y|
}|
|
花括號(hào)里定義函數(shù)體
---------------------
版權(quán)聲明:本文為CSDN博主「_iChthyosaur」的原創(chuàng)文章,遵循CC 4.0 by-sa版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34291505/article/details/86750352
在Scala的代碼里,句末的分號(hào)是可選的,但是如果一行有多條語(yǔ)句,則必須用分號(hào)隔開(kāi);如果一行只有一條完整語(yǔ)句,那么這個(gè)分號(hào)可以寫也可以不寫。函數(shù)的“return”關(guān)鍵字也是可選的,建議不要顯式聲明“return”。返回結(jié)果有一個(gè)特殊的類型“Unit”表示沒(méi)有返回值,該函數(shù)沒(méi)有任何可引用的返回結(jié)果。Unit類型同樣可以被推斷出來(lái),但如果顯式聲明為Unit類型的函數(shù),則即使函數(shù)體最后有一個(gè)可以返回具體值的表達(dá)式,也不會(huì)把表達(dá)式的結(jié)果返回。
如果將函數(shù)定義在class、object、trait里面的函數(shù),這種函數(shù)叫做“成員函數(shù)”或者“方法”
四、函數(shù)字面量
函數(shù)式編程有兩個(gè)主要思想,其中之一就是:函數(shù)是一等(first-class)的值。換句話說(shuō),一個(gè)函數(shù)的地位與一個(gè)Int值、一個(gè)String值等等,是一樣的。既然一個(gè)Int值可以成為函數(shù)的參數(shù)、函數(shù)的返回值、定義在函數(shù)體里、存儲(chǔ)在變量里,那么,作為地位相同的函數(shù),也可以這樣。你可以把一個(gè)函數(shù)當(dāng)參數(shù)傳遞給另一個(gè)函數(shù),也可以讓一個(gè)函數(shù)返回一個(gè)函數(shù),亦可以把函數(shù)賦給一個(gè)變量,又或者像定義一個(gè)值那樣在函數(shù)里定義別的函數(shù)(即前述的嵌套函數(shù))。就像寫一個(gè)整數(shù)字面量“1”那樣,Scala也可以定義函數(shù)的字面量。函數(shù)字面量是一種匿名函數(shù)的形式,它可以存儲(chǔ)在變量里、成為函數(shù)參數(shù)或者當(dāng)作函數(shù)返回值,其定義形式為:
(參數(shù)1: 參數(shù)1類型, 參數(shù)2: 參數(shù)2類型, ...) => { 函數(shù)體 }
通常,函數(shù)字面量會(huì)賦給一個(gè)變量,這樣就能通過(guò)“變量名(參數(shù))”的形式來(lái)使用函數(shù)字面量。在參數(shù)類型可以被推斷的情況下,可以省略類型,并且參數(shù)只有一個(gè)時(shí),圓括號(hào)也可以省略。
函數(shù)字面量的形式可以更精簡(jiǎn),即只保留函數(shù)體,并用下劃線“_”作為占位符來(lái)代替參數(shù)。在參數(shù)類型不明確時(shí),需要在下劃線后面顯式聲明其類型。多個(gè)占位符代表多個(gè)參數(shù),即第一個(gè)占位符是第一個(gè)參數(shù),第二個(gè)占位符是第二個(gè)參數(shù)……因此不能重復(fù)使用某個(gè)參數(shù)。例如:
scala> val f = (_: Int) + (_: Int)
f: (Int, Int) => Int = $$Lambda$1072/1534177037@fb42c1c
scala> f(1, 2)
res0: Int = 3
無(wú)論是用“def”定義的函數(shù),還是函數(shù)字面量,它們的函數(shù)體都可以把一個(gè)函數(shù)字面量作為一個(gè)返回結(jié)果,這樣就成為了返回函數(shù)的函數(shù);它們的參數(shù)變量的類型也可以是一個(gè)函數(shù),這樣調(diào)用時(shí)給的入?yún)⒕涂梢允且粋€(gè)函數(shù)字面量。類型為函數(shù)的變量,其冒號(hào)后面的類型寫法是“(參數(shù)1類型, 參數(shù)2類型,...) => 返回結(jié)果的類型”。例如:
scala> val add = (x: Int) => { (y: Int) => x + y }
add: Int => (Int => Int) = $$Lambda$1192/1767705308@55456711
scala> add(1)(10)
res0: Int = 11
scala> def aFunc(f: Int => Int) = f(1) + 1
aFunc: (f: Int => Int)Int
scala> aFunc(x => x + 1)
res1: Int = 3
在第一個(gè)例子中,變量add被賦予了一個(gè)返回函數(shù)的函數(shù)字面量。在調(diào)用時(shí),第一個(gè)括號(hào)里的“1”是傳遞給參數(shù)x,第二個(gè)括號(hào)里的“10”是傳遞給參數(shù)y。如果沒(méi)有第二個(gè)括號(hào),得到的就不是11,而是“(y: Int) => 1+ y”這個(gè)函數(shù)字面量。
在第二個(gè)例子中,函數(shù)aFunc的參數(shù)f是一個(gè)函數(shù),并且該函數(shù)要求是一個(gè)入?yún)镮nt類型、返回結(jié)果也是Int類型的函數(shù)。在調(diào)用時(shí),給出了函數(shù)字面量“x => x + 1”。這里沒(méi)有顯式聲明x的類型,因?yàn)榭梢酝ㄟ^(guò)f的類型來(lái)推斷出x必須是一個(gè)Int類型。在執(zhí)行時(shí),首先求值f(1),結(jié)合參數(shù)“1”和函數(shù)字面量,可以算出結(jié)果是2。那么,“f(1) + 1”就等于3了。
-
scala
+關(guān)注
關(guān)注
0文章
42瀏覽量
6592 -
Chisel
+關(guān)注
關(guān)注
0文章
7瀏覽量
484
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于 IAR Embedded Workbench 的自研 MCU 芯片軟件函數(shù)與變量內(nèi)存布局優(yōu)化精控方法

harmony OS NEXT-雙向數(shù)據(jù)綁定MVVM以及$$語(yǔ)法糖介紹
Ansible Playbook中的變量使用技巧
圖紙模板中的文本變量

如何在文本字段中使用上標(biāo)、下標(biāo)及變量

SUMIF函數(shù)對(duì)比VLOOKUP的優(yōu)勢(shì)
SUMIF函數(shù)與SUMIFS函數(shù)的區(qū)別
SUMIF函數(shù)使用教程
條理清晰,淺顯易懂:Lua語(yǔ)法基礎(chǔ)知識(shí)(第二部分)
Lua語(yǔ)法基礎(chǔ)教程(下篇)

Lua語(yǔ)法基礎(chǔ)教程(中篇)

如何由系統(tǒng)函數(shù)求頻率響應(yīng)
面試常考+1:函數(shù)指針與指針函數(shù)、數(shù)組指針與指針數(shù)組

評(píng)論