真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Scala中apply方法的用法-創(chuàng)新互聯(lián)

Scala 是構(gòu)建在 JVM 上的靜態(tài)類型的腳本語言,而腳本語言總是會(huì)有些約定來增強(qiáng)靈活性。關(guān)于協(xié)議在Python中是挺多的,看看Python的對(duì)象協(xié)議,有很多很多,如果對(duì)Python的對(duì)象協(xié)議了解(不了解的可以點(diǎn)擊此處)的比較深刻的話,其實(shí)scala的apply方法也是很好理解的,比如說 Scala 為配合 DSL 在方法調(diào)用時(shí)有這么一條約定:

創(chuàng)新互聯(lián)建站專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、隴縣網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站定制開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為隴縣等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

    在明確了方法調(diào)用的接收者的情況下,若方法只有一個(gè)參數(shù)時(shí),調(diào)用的時(shí)候就可以省略點(diǎn)及括號(hào)。如 “0 to 2”,實(shí)際完整調(diào)用是 “0.to(2)”。但 “println(2)” 不能寫成 “println 10“”,因?yàn)槲磳懗龇椒ㄕ{(diào)用的接收者 Console,所以可以寫成 “Console println 10”

到這里就要講到 apply 和 update 方法相關(guān)的約定,描述的是直接在對(duì)象(對(duì)象)后直接加圓括號(hào)的代碼的情況下,那就是:

用括號(hào)傳遞給變量(對(duì)象)一個(gè)或多個(gè)參數(shù)時(shí),Scala 會(huì)把它轉(zhuǎn)換成對(duì) apply 方法的調(diào)用;與此相似的,當(dāng)對(duì)帶有括號(hào)并包括一到若干參數(shù)的進(jìn)行賦值時(shí),編譯器將使用對(duì)象的 update 方法對(duì)括號(hào)里的參數(shù)和等號(hào)右邊的對(duì)象執(zhí)行調(diào)用。

我感覺這一點(diǎn)有點(diǎn)像Python里的可調(diào)用對(duì)象協(xié)議,即定義類的__call__方法,也可以得到類似的功能。

當(dāng)然,兩者語言語法上肯定有差異,但是我覺得這塊兒它們的設(shè)計(jì)思想應(yīng)該是異曲同工.下面通過幾個(gè)例子來理解.

1.比如數(shù)值theArray, 取數(shù)組的第一個(gè)元素的操作theArray(0)會(huì)轉(zhuǎn)換成 theArray.apply(0) 操作,這也能解釋為什么 Scala 數(shù)組取值不用中括號(hào)括下標(biāo)的方式,因?yàn)樗彩?strong>一次方法調(diào)用

2. anyObject("key1") 會(huì)被轉(zhuǎn)換成 anyObject.apply("key") 操作,比如 Map 的取值操作,舉個(gè)簡單的例子:

class SomeClass {
    def apply(key: String): String = {
        println("apply method called, key is: " + key)
        "Hello World!"
    }
}
 
val anyObject = new SomeClass
println(anyObject("key1"))

執(zhí)行后輸出結(jié)果是:

apply method called, key is: key1

Hello World!

說明是調(diào)用到了相應(yīng)的 apply 方法的。

3.我們?cè)跇?gòu)造 Array 或  Map 時(shí),會(huì)簡單的寫成

val numNames = Array("zero", "one", "two")

這里也是調(diào)用的 apply 方法,我們看起來好像是作用在類 Array 上的,其實(shí)不然,而是作用在 Array 的伴生對(duì)象(object Array)上的,調(diào)用的是伴生對(duì)象 Array 的  apply 方法,即:

val numNames = Array.apply("zero", "one", "two")

同樣看個(gè)單例對(duì)象的例子,也解釋了伴生對(duì)象的 apply 方法的調(diào)用

object EMail {
    def apply(user: String, domain: String): String = {
        println("apply method called")
        user + "@" + domain
    }
}
 
val email = EMail("fantasia", "sina.com")
println(email)

上面代碼執(zhí)行后輸出結(jié)果是:

apply method called

fantasia@sina.com

object apply 是一種比較普遍用法。 主要用來解決復(fù)雜對(duì)象的初始化問題,同時(shí)也是單例.

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


當(dāng)前名稱:Scala中apply方法的用法-創(chuàng)新互聯(lián)
網(wǎng)頁路徑:http://weahome.cn/article/dodioh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部