scala的隱式參數(shù)有什么作用

這篇文章主要介紹“scala的隱式參數(shù)有什么作用”,在日常操作中,相信很多人在scala的隱式參數(shù)有什么作用問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”scala的隱式參數(shù)有什么作用”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

站在用戶的角度思考問題,與客戶深入溝通,找到吉木乃網(wǎng)站設(shè)計(jì)與吉木乃網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋吉木乃地區(qū)。

方法可以具有 隱式 參數(shù)列表,由參數(shù)列表開頭的 implicit 關(guān)鍵字標(biāo)記。 如果參數(shù)列表中的參數(shù)沒有像往常一樣傳遞, Scala 將查看它是否可以獲得正確類型的隱式值,如果可以,則自動(dòng)傳遞。

Scala 將查找這些參數(shù)的位置分為兩類:

  • Scala 在調(diào)用包含有隱式參數(shù)塊的方法時(shí),將首先查找可以直接訪問的隱式定義和隱式參數(shù) (無前綴)。

  • 然后,它在所有伴生對(duì)象中查找與隱式候選類型相關(guān)的有隱式標(biāo)記的成員。

更加詳細(xì)的關(guān)于 Scala 到哪里查找隱式參數(shù)的指南請(qǐng)參考 常見問題

在下面的例子中,我們定義了一個(gè)方法 sum,它使用 Monoid 類的 addunit 方法計(jì)算一個(gè)列表中元素的總和。請(qǐng)注意,隱式值不能是頂級(jí)值。

abstract class Monoid[A] {  def add(x: A, y: A): A  def unit: A}
object ImplicitTest {  implicit val stringMonoid: Monoid[String] = new Monoid[String] {    def add(x: String, y: String): String = x concat y    def unit: String = ""  }    implicit val intMonoid: Monoid[Int] = new Monoid[Int] {    def add(x: Int, y: Int): Int = x + y    def unit: Int = 0  }    def sum[A](xs: List[A])(implicit m: Monoid[A]): A =    if (xs.isEmpty) m.unit    else m.add(xs.head, sum(xs.tail))      def main(args: Array[String]): Unit = {    println(sum(List(1, 2, 3)))          println(sum(List("a", "b", "c")))  }}

Monoid 定義了一個(gè)名為 add 的操作,它將一對(duì) A 類型的值相加并返回一個(gè) A,以及一個(gè)名為 unit 的操作,用來創(chuàng)建一個(gè)(特定的)A 類型的值。

為了說明隱式參數(shù)如何工作,我們首先分別為字符串和整數(shù)定義 Monoid 實(shí)例, StringMonoidIntMonoid。implicit 關(guān)鍵字表示可以隱式使用相應(yīng)的對(duì)象。

方法 sum 接受一個(gè) List[A],并返回一個(gè) A 的值,它從 unit 中取初始的 A 值,并使用 add 方法依次將列表中的下一個(gè) A 值相加。在這里將參數(shù) m 定義為隱式意味著,如果 Scala 可以找到隱式 Monoid[A] 用于隱式參數(shù) m,我們?cè)谡{(diào)用 sum 方法時(shí)只需要傳入 xs 參數(shù)。

main 方法中我們調(diào)用了 sum 方法兩次,并且只傳入?yún)?shù) xs。Scala 會(huì)在上例的上下文范圍內(nèi)尋找隱式值。第一次調(diào)用 sum 方法的時(shí)候傳入了一個(gè) List[Int] 作為 xs 的值,這意味著此處類型 AInt。隱式參數(shù)列表 m 被省略了,因此 Scala 將查找類型為 Monoid[Int] 的隱式值。第一查找規(guī)則如下

Scala 在調(diào)用包含有隱式參數(shù)塊的方法時(shí),將首先查找可以直接訪問的隱式定義和隱式參數(shù) (無前綴)。

intMonoid 是一個(gè)隱式定義,可以在main中直接訪問。 并且它的類型也正確,因此它會(huì)被自動(dòng)傳遞給 sum 方法。

第二次調(diào)用 sum 方法的時(shí)候傳入一個(gè) List[String],這意味著此處類型 AString。 與查找 Int 型的隱式參數(shù)時(shí)類似,但這次會(huì)找到 stringMonoid,并自動(dòng)將其作為 m 傳入。

該程序?qū)⑤敵觯?/p>

6abc

到此,關(guān)于“scala的隱式參數(shù)有什么作用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

當(dāng)前標(biāo)題:scala的隱式參數(shù)有什么作用
網(wǎng)站鏈接:http://muchs.cn/article32/ghspsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、ChatGPT、軟件開發(fā)、虛擬主機(jī)、網(wǎng)站排名、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站