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

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

在scala中使用def,val和var

在scala中使用def,val和var

回首憶惘然 2019-09-19 09:37:37
class Person(val name:String,var age:Int )def person = new Person("Kumar",12)person.age = 20println(person.age)這些代碼行輸出12,即使person.age=20已成功執(zhí)行。我發(fā)現(xiàn)這是因?yàn)槲沂褂昧薲ef def person = new Person("Kumar",12)。如果我使用var或val,則輸出為20。我理解scala中的默認(rèn)值是val。這個(gè):def age = 30age = 45...給出編譯錯(cuò)誤,因?yàn)樗J(rèn)為val。為什么上面的第一組行不能正常工作,而且還沒有錯(cuò)誤?
查看完整描述

3 回答

?
MM們

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

在Scala中有三種定義方法:

  • def定義一個(gè)方法

  • val定義一個(gè)固定(不能修改)

  • var定義一個(gè)變量(可以修改)

看看你的代碼:

def person = new Person("Kumar",12)

這定義了一個(gè)名為的新方法person。您可以只調(diào)用此方法,()因?yàn)樗欢x為無參數(shù)方法。對(duì)于empty-paren方法,你可以使用或不使用'()'來調(diào)用它。如果你只是寫:

person

那么你正在調(diào)用這個(gè)方法(如果你沒有分配返回值,它將被丟棄)。在這行代碼中:

person.age = 20

會(huì)發(fā)生什么是你首先調(diào)用person方法,并在返回值(類的實(shí)例Person)上更改age成員變量。

最后一行:

println(person.age)

在這里,您再次調(diào)用該person方法,該方法返回一個(gè)新的類實(shí)例Personage設(shè)置為12)。它與此相同:

println(person().age)


查看完整回答
反對(duì) 回復(fù) 2019-09-19
?
慕俠2389804

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

我首先介紹了def,valvar之間Scala中存在的區(qū)別。

  • def - 為懶惰評(píng)估的右側(cè)內(nèi)容定義不可變標(biāo)簽 - 按名稱評(píng)估。

  • val - 為急劇/立即評(píng)估的右側(cè)內(nèi)容定義不可變標(biāo)簽 - 按值評(píng)估。

  • var - 定義一個(gè)可變變量,最初設(shè)置為評(píng)估的右側(cè)內(nèi)容。

例如,def

scala> def something = 2 + 3 * 4 something: Intscala> something  // now it's evaluated, lazily upon usageres30: Int = 14

例如,val

scala> val somethingelse = 2 + 3 * 5 // it's evaluated, eagerly upon definitionsomethingelse: Int = 17

例子,var

scala> var aVariable = 2 * 3aVariable: Int = 6scala> aVariable = 5aVariable: Int = 5

根據(jù)上面的說法,defval的標(biāo)簽不能重新分配,如果有任何嘗試,將引發(fā)如下所示的錯(cuò)誤:

scala> something = 5 * 6<console>:8: error: value something_= is not a member of object $iw
       something = 5 * 6
       ^

當(dāng)類被定義為:

scala> class Person(val name: String, var age: Int)defined class Person

然后實(shí)例化:

scala> def personA = new Person("Tim", 25)personA: Person

一個(gè)不可變的標(biāo)簽被用于人(即“人物角色)的該特定實(shí)例創(chuàng)建的。每當(dāng)需要修改可變字段'age'時(shí),此類嘗試將失?。?/p>

scala> personA.age = 44personA.age: Int = 25

正如預(yù)期的那樣,'年齡'是不可變標(biāo)簽的一部分。處理此問題的正確方法包括使用可變變量,如下例所示:

scala> var personB = new Person("Matt", 36)personB: Person = Person@59cd11fe

scala> personB.age = 44personB.age: Int = 44    // value re-assigned, as expected

很明顯,從可變變量引用(即'personB')可以修改類可變字段'age'。

我仍然會(huì)強(qiáng)調(diào),所有內(nèi)容都來自上述差異,任何Scala程序員都必須清楚這一點(diǎn)。


查看完整回答
反對(duì) 回復(fù) 2019-09-19
?
慕的地8271018

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

def person = new Person("Kumar", 12)

你正在定義一個(gè)函數(shù)/惰性變量,它總是返回一個(gè)名為“Kumar”且年齡為12的新Person實(shí)例。這是完全有效的,編譯器沒有理由抱怨。調(diào)用person.age將返回此新創(chuàng)建的Person實(shí)例的年齡,該實(shí)例始終為12。

寫作時(shí)

person.age = 45

您為類Person中的age屬性分配一個(gè)新值,該值有效,因?yàn)閍ge聲明為var。如果您嘗試person使用新的Person對(duì)象重新分配,編譯器會(huì)抱怨

person = new Person("Steve", 13)  // Error


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

添加回答

舉報(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)