第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Scala中方法和函數(shù)的區(qū)別

Scala中方法和函數(shù)的區(qū)別

Scala中方法和函數(shù)的區(qū)別我讀Scala函數(shù)(部分)又一次斯卡拉之旅)。在該職位上,他說(shuō):方法和函數(shù)不是一回事。但他沒(méi)有解釋這件事。他想說(shuō)什么?
查看完整描述

3 回答

?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

首先,讓我們看看Scala規(guī)范告訴我們什么。第三章(類型)告訴我們功能類型(3.2.9)和方法類型(3.3.1)。第四章(基本宣言)談到價(jià)值宣言和定義?(4.1),?可變聲明和定義(4.2)和函數(shù)聲明和定義(4.6)。第六章(詞組)談到匿名函數(shù)(6.23)和方法值(6.7)。奇怪的是,函數(shù)值只在3.2.9上提到過(guò)一次,而在其他地方則沒(méi)有。

A?功能類型(大致上)是表單的一種類型。(T1,.,TN)=>U,這是特征的縮寫。FunctionN在標(biāo)準(zhǔn)圖書(shū)館里。匿名函數(shù)方法值有函數(shù)類型,函數(shù)類型可以用作值、變量和函數(shù)聲明和定義的一部分。實(shí)際上,它可以是方法類型的一部分。

A?方法類型非值型..這意味著值-沒(méi)有對(duì)象,沒(méi)有實(shí)例-具有方法類型。如上文所述,a方法值實(shí)際上有一個(gè)功能類型..方法類型是def聲明-關(guān)于def除了它的身體。

價(jià)值聲明和定義變量聲明和定義valvar聲明,包括兩者類型和價(jià)值-分別可以是,功能類型匿名函數(shù)或方法值..注意,在JVM上,這些(方法值)是用Java所稱的“方法”實(shí)現(xiàn)的。

A?功能聲明def聲明,包括類型體體..類型部分是方法類型,而主體是表達(dá)式或塊..這也是用Java所謂的“方法”在JVM上實(shí)現(xiàn)的。

最后,匿名函數(shù)功能類型(特征的一個(gè)例子)FunctionN),以及方法值都是一樣的!區(qū)別在于方法值是通過(guò)后置下劃線(m _是對(duì)應(yīng)于“函數(shù)聲明”的方法值(def)?m),或者通過(guò)一個(gè)名為ETA-擴(kuò)張,這就像一種從方法到功能的自動(dòng)轉(zhuǎn)換。

規(guī)格是這么說(shuō)的,所以讓我把這個(gè)放在最前面:我們不使用這個(gè)術(shù)語(yǔ)!這會(huì)導(dǎo)致所謂的混亂“功能聲明”,這是程序的一部分(第4章-基本聲明)和“匿名函數(shù)”,這是一個(gè)表達(dá)式,并且“功能類型”這是一種類型-一種特質(zhì)。

以下術(shù)語(yǔ)和經(jīng)驗(yàn)豐富的Scala程序員使用的術(shù)語(yǔ)與規(guī)范的術(shù)語(yǔ)有一處不同:而不是說(shuō)功能聲明,我們說(shuō)方法..甚至方法聲明。此外,我們注意到價(jià)值聲明變量聲明也是實(shí)用的方法。

因此,考慮到上述術(shù)語(yǔ)的變化,下面是對(duì)這一區(qū)別的實(shí)用解釋。

A?功能是一個(gè)對(duì)象,該對(duì)象包括FunctionX特征,如Function0,?Function1,?Function2等可能包括PartialFunction也是,這實(shí)際上擴(kuò)展了Function1.

讓我們看看其中一個(gè)特征的類型簽名:

trait?Function2[-T1,?-T2,?+R]?extends?AnyRef

這個(gè)特性有一個(gè)抽象的方法(它也有一些具體的方法):

def?apply(v1:?T1,?v2:?T2):?R

這告訴了我們所有需要知道的事情。一個(gè)功能有一個(gè)apply接收N類型參數(shù)t1,?T2, ...,?總氮,并返回某種類型的東西。R..它對(duì)它所接收的參數(shù)是對(duì)變的,在結(jié)果上是協(xié)變的.

這個(gè)差異意味著Function1[Seq[T], String]Function1[List[T], AnyRef]..作為一個(gè)子類型意味著它可以被使用。代替它。如果我要打電話f(List(1, 2, 3))并期望AnyRef以上兩種類型中的任何一種都可以工作。

現(xiàn)在,什么是相似性一種方法和一種功能?好吧,如果f是一個(gè)函數(shù)m是一個(gè)局部變量的方法,那么這兩個(gè)方法都可以這樣調(diào)用:

val?o1?=?f(List(1,?2,?3))val?o2?=?m(List(1,?2,?3))

這些調(diào)用實(shí)際上是不同的,因?yàn)榈谝粋€(gè)調(diào)用只是一個(gè)語(yǔ)法糖。Scala將其擴(kuò)展為:

val?o1?=?f.apply(List(1,?2,?3))

當(dāng)然,它是對(duì)象的方法調(diào)用。f..函數(shù)還具有其他語(yǔ)法糖的優(yōu)勢(shì):函數(shù)文字(實(shí)際上是其中的兩個(gè))和(T1, T2) => R輸入簽名。例如:

val?f?=?(l:?List[Int])?=>?l?mkString?""val?g:?(AnyVal)?=>?String?=?{
??case?i:?Int?=>?"Int"
??case?d:?Double?=>?"Double"
??case?o?=>?"Other"}

方法和函數(shù)之間的另一個(gè)相似之處是,前者可以很容易地轉(zhuǎn)換為后者:

val?f?=?m?_

Scala將擴(kuò)展那,那個(gè),假設(shè)m類型是(List[Int])AnyRef轉(zhuǎn)入(Scala 2.7):

val?f?=?new?AnyRef?with?Function1[List[Int],?AnyRef]?{
??def?apply(x$1:?List[Int])?=?this.m(x$1)}

在Scala2.8上,它實(shí)際上使用了AbstractFunction1類以減少班級(jí)大小。

注意,一個(gè)函數(shù)不能反過(guò)來(lái)轉(zhuǎn)換-從一個(gè)函數(shù)轉(zhuǎn)換到一個(gè)方法。

然而,方法有一個(gè)很大的優(yōu)勢(shì)(嗯,兩個(gè)-它們可以稍微快一點(diǎn)):它們可以接收。類型參數(shù)..例如,同時(shí)f上面可以指定List它收到(List[Int](在示例中),m可以參數(shù)化它:

def?m[T](l:?List[T]):?String?=?l?mkString?""

我認(rèn)為這幾乎涵蓋了一切,但我很樂(lè)意用任何問(wèn)題的答案來(lái)補(bǔ)充這一點(diǎn)。


查看完整回答
反對(duì) 回復(fù) 2019-06-05
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

方法和函數(shù)之間的一個(gè)很大的實(shí)際區(qū)別是return手段。return只有從方法中返回。例如:

scala> val f = () => { return "test" }<console>:4: error: return outside method definition       val f = () => { return "test" }
                       ^

從方法中定義的函數(shù)返回非本地返回:

scala> def f: String = {                 
     |    val g = () => { return "test" }
     | g()                               
     | "not this"
     | }f: Stringscala> f
res4: String = test

而從本地方法返回只能從該方法返回。

scala> def f2: String = {         
     | def g(): String = { return "test" }
     | g()
     | "is this"
     | }f2: Stringscala> f2
res5: String = is this


查看完整回答
反對(duì) 回復(fù) 2019-06-05
?
鴻蒙傳說(shuō)

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

功能可以使用參數(shù)列表調(diào)用函數(shù)以生成結(jié)果。函數(shù)具有參數(shù)列表、主體和結(jié)果類型。作為類、特征或單例對(duì)象的成員的函數(shù)被調(diào)用。方法..在其他函數(shù)中定義的函數(shù)稱為局部函數(shù)。帶有結(jié)果類型Unit的函數(shù)稱為過(guò)程。源代碼中的匿名函數(shù)稱為函數(shù)文本。在運(yùn)行時(shí),函數(shù)文本被實(shí)例化為稱為函數(shù)值的對(duì)象。


查看完整回答
反對(duì) 回復(fù) 2019-06-05
  • 3 回答
  • 0 關(guān)注
  • 732 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)