一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

3天內不再提示

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

學FPGA,慢慢來 ? 2019-08-16 16:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

變量:

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

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

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

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

函數:

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

用“def”開始函數定義

| 函數名

||參數及參數類型

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

||||等號

|||||

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

if(x > y)

x

else|

y|

}|

|

花括號里定義函數體

---------------------

版權聲明:本文為CSDN博主「_iChthyosaur」的原創(chuàng)文章,遵循CC 4.0 by-sa版權協(xié)議,轉載請附上原文出處鏈接及本聲明。

原文鏈接: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類型。在執(zhí)行時,首先求值f(1),結合參數“1”和函數字面量,可以算出結果是2。那么,“f(1) + 1”就等于3了。

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

    關注

    0

    文章

    42

    瀏覽量

    6690
  • Chisel
    +關注

    關注

    0

    文章

    7

    瀏覽量

    516
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    解鎖LuatOS新世界:次開發(fā)必備的3個核心常識

    來了解LuatOS開發(fā)需要熟悉的幾個常識。 ? 一、匿名函數 在Lua代碼里面,經常看到沒有名字的函數。 這種函數定義之后,要么馬上運行,要么作為另一個函數的返回值賦給其他
    的頭像 發(fā)表于 06-23 16:08 ?63次閱讀
    解鎖LuatOS新世界:<b class='flag-5'>二</b>次開發(fā)必備的3個核心常識

    突破LuatOS開發(fā)瓶頸:三個次開發(fā)必備知識揭秘!

    。 ? 一、匿名函數 在Lua代碼里面,經??吹經]有名字的函數。 這種函數定義之后,要么馬上運行,要么作為另一個函數的返回值賦給其他變量,所
    的頭像 發(fā)表于 06-23 15:05 ?67次閱讀
    突破LuatOS開發(fā)瓶頸:三個<b class='flag-5'>二</b>次開發(fā)必備知識揭秘!

    harmony OS NEXT-雙向數據綁定MVVM以及$$語法糖介紹

    # 鴻蒙Harmony-雙向數據綁定MVVM以及$$語法糖介紹 ## 1.1 雙向數據綁定概念 在鴻蒙(HarmonyOS)應用開發(fā)中,雙向數據改變(或雙向數據綁定)是一種讓數據·模型和UI組件之間
    的頭像 發(fā)表于 04-29 16:52 ?305次閱讀

    Ansible Playbook中的變量使用技巧

    在inventory中定義的連接變量(比如ansible_ssh_user);優(yōu)先級第。
    的頭像 發(fā)表于 04-15 10:26 ?314次閱讀

    圖紙模板中的文本變量

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

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

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

    SUMIF函數對比VLOOKUP的優(yōu)勢

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

    SUMIF函數與SUMIFS函數的區(qū)別

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

    SUMIF函數使用教程

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

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

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

    Lua語法基礎教程(下篇)

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

    Lua語法基礎教程(中篇)

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

    如何由系統(tǒng)函數求頻率響應

    復數域中描述和考察系統(tǒng)的特性,通常表示為G(s),其中s是復數變量,s=σ+jω(σ為實部,ω為虛部)。 頻率響應函數:描述系統(tǒng)對不同頻率正弦輸入信號的響應特性,是系統(tǒng)傳遞函數在σ=0時的特例,即當系統(tǒng)處于穩(wěn)態(tài)時,輸入和輸出的
    的頭像 發(fā)表于 10-18 09:32 ?3542次閱讀

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

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

    XC8編譯器調用函數后局域變量值被改變是哪里出了問題?

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