本篇內(nèi)容主要講解“Scala重載是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Scala重載是什么”吧!
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),金堂縣企業(yè)網(wǎng)站建設(shè),金堂縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,金堂縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,金堂縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
如果一個(gè)標(biāo)識(shí)符或選擇e引用了數(shù)個(gè)類的成員,則將使用引用的上下文來(lái)推斷唯一的成員。使用的方法將依賴于e是否被用作一個(gè)函數(shù)。設(shè)A是e引用的成員的集合。 首先假定e作為函數(shù)出現(xiàn)在應(yīng)用中,比如e(args)。如果在A中有且僅有一個(gè)可選成員是一個(gè)(可能是多態(tài))方法類型,其元數(shù)與給出的參量數(shù)目匹配,則就會(huì)選定該可選成員。 否則,設(shè)Ts是通過(guò)用未定義類型來(lái)類型化每個(gè)參量所得到的類型向量。首先要確定的是可用的可選成員的集合。如果Ts中每個(gè)類型都與對(duì)應(yīng)的可選成員中正式參數(shù)類型相似,且如果期望類型已定義,方法的結(jié)果類型與之兼容,則該可選項(xiàng)是可用的。對(duì)于一個(gè)多態(tài)方法,如果本地類型推斷可以確定類型參量,則該實(shí)例化的方法是可用的,繼而該多態(tài)方法也是可用的。 設(shè)B是可用的可選項(xiàng)的集合。如果B為空則導(dǎo)致錯(cuò)誤。否則可以用以下”同樣具體”和”更具體” 的定義來(lái)選出在B中最具體的可選項(xiàng): ? 具有類型(Ts)U的參數(shù)化的方法,如果有某些類型為S的其他成員,S對(duì)于類型Ts的參量(ps)是可用的,則該方法與這些成員同樣具體。 ? 具有類型[a1 >: L1 <: U1,...,an >: Ln <: Un]T的多態(tài)方法,如果有某些類型為S其他成員,如果假定對(duì)于i=1,...,n,每個(gè)ai都是一個(gè)抽象類型命名,其邊界在Li之上且在Ui之下,有T和S同樣具體,則該方法和這些成員同樣具體。 ? 具有其他類型的成員總是與一個(gè)參數(shù)化的方法或一個(gè)多態(tài)方法同樣具體。 ? 給定具有類型T和U的兩個(gè)沒(méi)有參數(shù)化也不是多態(tài)方法類型的成員,類型為T的成員與類型為U的成員同樣具體的條件是T的雙重存在與U的雙重存在相似。這里多態(tài)類型[a1 >: L1 <: U1,...,an >: Ln <: Un]T的雙重存在是T forSome { type a1 >: L1 <: U1,...,type an >: Ln <: Un}。其他類型的雙重存在是類型自身。 如果A與B同樣具體,同時(shí)要么B與A不同樣具體,要么A在B的一個(gè)子類中定義,則A比B更具體。 如果B中沒(méi)有可選項(xiàng)比B中其他可選項(xiàng)更具體則將導(dǎo)致錯(cuò)誤。 下面假定e以函數(shù)的形式在類型應(yīng)用中出現(xiàn),比如e[targs]。那么我們將選擇A中所有的與targs中的類型參量具有同樣數(shù)目的參數(shù)類型的可選項(xiàng)。如果沒(méi)有該類可選項(xiàng)將導(dǎo)致錯(cuò)誤。如果有多個(gè)這樣的可選項(xiàng),則將對(duì)整個(gè)表達(dá)式e[targs]重新應(yīng)用重載解析。 最后我們假定e沒(méi)有在應(yīng)用或類型應(yīng)用中做為函數(shù)出現(xiàn)。如果給出了期望類型,設(shè)B是A中與其兼的該類可選項(xiàng)的集合。否則,設(shè)B為A。在此情況下我們?cè)贐的所有可選項(xiàng)中選擇最具體的可選項(xiàng)。如果B中沒(méi)有可選項(xiàng)比B中其他所有的可選項(xiàng)更具體則將導(dǎo)致錯(cuò)誤。 在所有情況下,如果最具體的可選項(xiàng)定義在類C中,且有另外一個(gè)可應(yīng)用的可選項(xiàng)定義在C的子類中,則將導(dǎo)致錯(cuò)誤。 示例6.25.1 考慮以下定義: class A extends B {} def f(x: B, y: B) = ... def f(x: A, y: B) = ... val a: A val b: B 則應(yīng)用f(b, b)指向f的第一個(gè)定義,應(yīng)用f(a, a)指向第二個(gè)。假設(shè)我們添加第三個(gè)重載定義 def f(x: B, y: A) = ... 則應(yīng)用f(a, a)將因模糊定義而被拒絕,因?yàn)椴淮嬖诟唧w的可應(yīng)用簽名。 |
到此,相信大家對(duì)“Scala重載是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!