衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

chisel(二)scala語法 函數與變量

學FPGA,慢慢來 ? 2019-08-16 16:08 ? 次閱讀

變量:

Scala在定義一個變量時,必須在其變量名前添加關鍵字“var”或“val”這兩者的區別是“var”修飾的變量可以新賦值,并把原值拋棄,而用了“val”修飾的變量,則被禁止重新賦值。前者在定義后只可以修改,而后者是只能讀不能寫的變量。

在定義變量時,Scala推薦的變量名命名方式是“駝峰命名法”,每個單詞的首字母大寫,變量名和函數名以小寫字母開頭,類、對象和特質以大寫字母開頭。首次定義變量時就要給予具體的值來初始化。

在“var”類型重新賦值時,新值和舊值是同一類型,否則就會發生類型匹配錯誤

由于Scala是函數式編程,函數式編程的思想之一就是傳入函數的參數不應該被改變,所以Scala提倡建議val型變量。

函數:

Scala的函數定義以“def”開頭,然后是一個自定義的函數名(推薦駝峰命名法),接著是用圓括號“( )”包起來的參數列表。在參數列表里,多個參數用逗號隔開,并且每個參數名后面要緊跟一個冒號以及顯式聲明的參數類型,因為編譯器在編譯期間無法推斷出入參類型。寫完參數列表后,應該緊跟一個冒號,再添加函數返回結果的類型。最后,再寫一個等號“=”,等號后面是用花括號“{ }”包起來的函數體。例如:

用“def”開始函數定義

| 函數名

||參數及參數類型

|||函數返回結果的類型

||||等號

|||||

def max(x: Int, y: Int): Int = {

if(x > y)

x

else|

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了。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • scala
    +關注

    關注

    0

    文章

    42

    瀏覽量

    6454
  • Chisel
    +關注

    關注

    0

    文章

    7

    瀏覽量

    466
收藏 人收藏

    評論

    相關推薦

    圖紙模板中的文本變量

    “ ?文本變量和系統自帶的內置變量,可以幫助工程師靈活、高效地配置標題欄中的信息,而不用擔心模板中的文字對象被意外修改。 ? ” 文本變量語法 文本
    的頭像 發表于 11-13 18:21 ?229次閱讀
    圖紙模板中的文本<b class='flag-5'>變量</b>

    如何在文本字段中使用上標、下標及變量

    名為“Revision”,值為“0.0”的文本變量: 這些變量允許您用變量名替換任何文本字符串。這種替換發生在變量名稱在${VARIABLENAME}?的
    的頭像 發表于 11-12 12:23 ?183次閱讀
    如何在文本字段中使用上標、下標及<b class='flag-5'>變量</b>

    SUMIF函數對比VLOOKUP的優勢

    功能和使用場景上有所不同。 SUMIF函數簡介 SUMIF函數是Excel中用于條件求和的函數。它的基本語法是: SUMIF (range, criteria, [sum_range]
    的頭像 發表于 11-11 09:16 ?440次閱讀

    SUMIF函數與SUMIFS函數的區別

    : 1. 函數定義 SUMIF函數 :用于對滿足單一條件的單元格求和。其基本語法為 SUMIF(range, criteria, [sum_range]) ,其中: range :應用條件的區域
    的頭像 發表于 10-30 09:51 ?1568次閱讀

    SUMIF函數使用教程

    SUMIF函數是Excel中非常實用的函數之一,能夠根據指定條件對數據進行篩選和求和操作。以下是對SUMIF函數使用方法的詳細教程: 一、基本語法 SUMIF
    的頭像 發表于 10-30 09:50 ?679次閱讀

    條理清晰,淺顯易懂:Lua語法基礎知識(第部分)

    今天我們繼續學習Lua語法基礎教程,中篇。 五、變量 5.1 number變量 變量,可以看作是一個桶,在里面裝你想要裝的內容。這些內容可以是Lua包含的所有合法類型。 例如:我想要新
    的頭像 發表于 10-29 13:40 ?178次閱讀

    Lua語法基礎教程(下篇)

    今天我們繼續學習Lua語法基礎教程,下篇。 九、函數 9.1 初識函數 函數是指一段在一起的、可以做某一件事兒的程序,也叫做子程序。 在前面的內容中,我們已經接觸過了
    的頭像 發表于 10-26 11:41 ?331次閱讀
    Lua<b class='flag-5'>語法</b>基礎教程(下篇)

    Lua語法基礎教程(中篇)

    今天我們繼續學習Lua語法基礎教程,中篇。 五、變量 5.1 number變量 變量,可以看作是一個桶,在里面裝你想要裝的內容。這些內容可以是Lua包含的所有合法類型。 例如:我想要新
    的頭像 發表于 10-26 11:39 ?308次閱讀
    Lua<b class='flag-5'>語法</b>基礎教程(中篇)

    面試常考+1:函數指針與指針函數、數組指針與指針數組

    函數是指返回值為指針的函數語法:返回值類型*函數名(參數列表)。示例代碼:#include#includeint*getNumber(inta,intb){in
    的頭像 發表于 08-10 08:11 ?989次閱讀
    面試常考+1:<b class='flag-5'>函數</b>指針與指針<b class='flag-5'>函數</b>、數組指針與指針數組

    XC8調用函數后局域變量值被改變是怎么回事呀!

    最近發現個問題,有個函數里邊調用別的函數后老出錯,查找程序沒有問題,經過仿真后發現在調用一個子函數后有幾個局部變量值會發生改變,再分析原因,發現本
    發表于 04-30 15:33

    為什么stm32cubeide經常按住Ctrl+點擊函數變量無法跳轉到對應函數變量定義?

    為什么stm32cubeide經常按住Ctrl+點擊函數變量無法跳轉到對應函數變量定義。只能用全局搜索去找函數
    發表于 03-13 07:59

    C語言中的三種形式變量

    局部變量是在一個函數、代碼塊內部聲明的變量,只能被該函數或者代碼塊內部應用。局部變量函數之外不
    發表于 03-11 17:34 ?801次閱讀
    C語言中的三種形式<b class='flag-5'>變量</b>

    淺談C語言中的函數定義

    如果函數要使用參數,則必須聲明接受參數值的變量。這些變量稱為函數的形式參數。 形式參數就像函數內的其他局部
    發表于 03-11 10:09 ?444次閱讀

    函數指針與回調函數的應用實例

    通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數函數指針可以像一般
    的頭像 發表于 03-07 11:13 ?435次閱讀
    <b class='flag-5'>函數</b>指針與回調<b class='flag-5'>函數</b>的應用實例

    output函數怎么用

    輸出到標準輸出(通常是控制臺窗口)。 在 Python 中,你可以使用 print 函數輸出任何你想要查看的內容,包括字符串、變量等。以下是使用 print 函數的幾個示例: 輸出字符串: print
    的頭像 發表于 02-23 14:21 ?1341次閱讀
    波音现金网| 彩会百家乐游戏| bet365备用网| k7娱乐城开户| 百家乐官网超级市场| 百家乐等投注网改单| 爱博娱乐| 威斯汀百家乐官网的玩法技巧和规则| 郑州市太阳城宾馆| 百家乐官网网上赌局| HG百家乐大转轮| 威尼斯人娱乐城注册送彩金 | 百家乐赌场游戏平台| 百家乐官网发牌千数| 肯博百家乐官网的玩法技巧和规则| 水浒传老虎机破解| 星际娱乐城| 百家乐官网九| 金沙| 做生意门面对着什么方向好| 明升投注网 | 百家乐能赢到钱吗| 德州扑克 规则| 格龙24山五行| 威尼斯人娱乐城线路| 赌场百家乐官网是如何| 东莞水果机遥控器| tt百家乐官网的玩法技巧和规则 | 百家乐缩水软件| 沈阳市| 百家乐如何打公式| 百家乐官网龙虎规则| 网站百家乐假| 黎川县| 菲律宾百家乐娱乐| 百家乐官网投注方法网| 一二博| 送现金百家乐的玩法技巧和规则| 百家乐技巧论坛| 百家乐官网群boaicai| 澳门百家乐手机软件|