明显调用的表达式前的括号必须具有函数类型_Chisel(二) Scala语法 变量与函数...
變量:
Scala在定義一個變量時,必須在其變量名前添加關鍵字“var”或“val”這兩者的區別是“var”修飾的變量可以新賦值,并把原值拋棄,而用了“val”修飾的變量,則被禁止重新賦值。前者在定義后只可以修改,而后者是只能讀不能寫的變量。
在定義變量時,Scala推薦的變量名命名方式是“駝峰命名法”,每個單詞的首字母大寫,變量名和函數名以小寫字母開頭,類、對象和特質以大寫字母開頭。首次定義變量時就要給予具體的值來初始化。
在“var”類型重新賦值時,新值和舊值是同一類型,否則就會發生類型匹配錯誤
由于Scala是函數式編程,函數式編程的思想之一就是傳入函數的參數不應該被改變,所以Scala提倡建議val型變量。
函數:
Scala的函數定義以“def”開頭,然后是一個自定義的函數名(推薦駝峰命名法),接著是用圓括號“( )”包起來的參數列表。在參數列表里,多個參數用逗號隔開,并且每個參數名后面要緊跟一個冒號以及顯式聲明的參數類型,因為編譯器在編譯期間無法推斷出入參類型。寫完參數列表后,應該緊跟一個冒號,再添加函數返回結果的類型。最后,再寫一個等號“=”,等號后面是用花括號“{ }”包起來的函數體。例如:
用“def”開始函數定義 | 函數名| | 參數及參數類型| | | 函數返回結果的類型| | | | 等號| | | | |def max(x: Int, y: Int): Int = {if(x > y)xelse |y |} ||花括號里定義函數體---------------------
版權聲明:本文為CSDN博主「_iChthyosaur」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_34291505/article/details/86750352
在Scala的代碼里,句末的分號是可選的,但是如果一行有多條語句,則必須用分號隔開;如果一行只有一條完整語句,那么這個分號可以寫也可以不寫。函數的“return”關鍵字也是可選的,建議不要顯式聲明“return”。返回結果有一個特殊的類型“Unit”表示沒有返回值,該函數沒有任何可引用的返回結果。 Unit類型同樣可以被推斷出來,但如果顯式聲明為Unit類型的函數,則即使函數體最后有一個可以返回具體值的表達式,也不會把表達式的結果返回。
如果將函數定義在class、object、trait里面的函數,這種函數叫做“成員函數”或者“方法”
四、函數字面量
函數式編程有兩個主要思想,其中之一就是:函數是一等(first-class)的值。換句話說,一個函數的地位與一個Int值、一個String值等等,是一樣的。既然一個Int值可以成為函數的參數、函數的返回值、定義在函數體里、存儲在變量里,那么,作為地位相同的函數,也可以這樣。你可以把一個函數當參數傳遞給另一個函數,也可以讓一個函數返回一個函數,亦可以把函數賦給一個變量,又或者像定義一個值那樣在函數里定義別的函數(即前述的嵌套函數)。就像寫一個整數字面量“1”那樣,Scala也可以定義函數的字面量。函數字面量是一種匿名函數的形式,它可以存儲在變量里、成為函數參數或者當作函數返回值,其定義形式為:
(參數1: 參數1類型, 參數2: 參數2類型, ...) => { 函數體 }
通常,函數字面量會賦給一個變量,這樣就能通過“變量名(參數)”的形式來使用函數字面量。在參數類型可以被推斷的情況下,可以省略類型,并且參數只有一個時,圓括號也可以省略。
函數字面量的形式可以更精簡,即只保留函數體,并用下劃線“_”作為占位符來代替參數。在參數類型不明確時,需要在下劃線后面顯式聲明其類型。多個占位符代表多個參數,即第一個占位符是第一個參數,第二個占位符是第二個參數……因此不能重復使用某個參數。例如:
scala> val f = (_: Int) + (_: Int) f: (Int, Int) => Int = $$Lambda$1072/1534177037@fb42c1c scala> f(1, 2) res0: Int = 3無論是用“def”定義的函數,還是函數字面量,它們的函數體都可以把一個函數字面量作為一個返回結果,這樣就成為了返回函數的函數;它們的參數變量的類型也可以是一個函數,這樣調用時給的入參就可以是一個函數字面量。類型為函數的變量,其冒號后面的類型寫法是“(參數1類型, 參數2類型,...) => 返回結果的類型”。例如:
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在第一個例子中,變量add被賦予了一個返回函數的函數字面量。在調用時,第一個括號里的“1”是傳遞給參數x,第二個括號里的“10”是傳遞給參數y。如果沒有第二個括號,得到的就不是11,而是“(y: Int) => 1 + y”這個函數字面量。
在第二個例子中,函數aFunc的參數f是一個函數,并且該函數要求是一個入參為Int類型、返回結果也是Int類型的函數。在調用時,給出了函數字面量“x => x + 1”。這里沒有顯式聲明x的類型,因為可以通過f的類型來推斷出x必須是一個Int類型。在執行時,首先求值f(1),結合參數“1”和函數字面量,可以算出結果是2。那么,“f(1) + 1”就等于3了。
https://blog.csdn.net/stanary/article/details/99679407?blog.csdn.net總結
以上是生活随笔為你收集整理的明显调用的表达式前的括号必须具有函数类型_Chisel(二) Scala语法 变量与函数...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cmd xcopy 拷贝文件夹_在纯do
- 下一篇: XCTF-Reverse:logmein