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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

整個程序可以不變嗎?

整個程序可以不變嗎?

Qyouu 2021-04-08 14:11:01
我熟悉不變性并且可以設(shè)計不變性類,但是我大部分都是學(xué)術(shù)知識,缺乏實踐經(jīng)驗請參考上面的鏈接圖像(尚未嵌入)從下往上看學(xué)生需要一個新地址我們并沒有真正改變學(xué)生,而是創(chuàng)建了一個包含新地址的新學(xué)生。mutator方法返回這個新對象問:假設(shè)mutator調(diào)用來自一個不可變的對象,該新對象將如何處理?不能將新學(xué)生保存在講座中,因為講座也是不可變的所以我們也需要一個新的講座,其中包括新的學(xué)生但是在哪里保存新的講座?當(dāng)然,在新學(xué)期,它在哪里結(jié)束?至少可以通過使用組件外觀模式來斷開該鏈,該組件可以處理所有新對象的創(chuàng)建,而不必通過整個鏈轉(zhuǎn)發(fā)呼叫問題:這在哪里停止?不必在某個地方至少有一個可變對象才能保存最頂層的實例嗎?
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

這就是函數(shù)編程的思想。一切都是不可變的,不允許任何函數(shù)調(diào)用產(chǎn)生副作用。像您的示例一樣,突變復(fù)雜對象的唯一方法是重新創(chuàng)建父對象。

現(xiàn)在的問題是如何更改程序狀態(tài)。因此,我們首先考慮堆棧。它包含所有局部變量的值以及被調(diào)用函數(shù)的所有參數(shù)的值。我們可以通過調(diào)用新函數(shù)來創(chuàng)建新值。我們可以通過從函數(shù)返回來丟棄值。因此,我們可以通過調(diào)用函數(shù)來改變程序狀態(tài)。但是,并非總是可以從函數(shù)中返回以丟棄其局部變量,因為我們可能只希望丟棄某些局部變量,而需要保留其他局部變量的值以進行進一步的操作。在這種情況下,我們根本無法返回,但是我們需要調(diào)用另一個函數(shù)并將僅一些局部變量傳遞給該函數(shù)?,F(xiàn)在,為了防止堆棧溢出,功能語言具有稱為“尾部調(diào)用優(yōu)化”的功能,能夠從調(diào)用堆棧中刪除不必要的條目。如果關(guān)聯(lián)函數(shù)唯一要做的就是返回自身調(diào)用的函數(shù)的值,則不需要調(diào)用堆棧。在這種情況下,沒有必要保留調(diào)用堆棧條目。通過刪除不必要的調(diào)用堆棧條目,將丟棄原本未使用的局部變量的值。您可能想了解一下在這里。另外,尾遞歸與此有關(guān)。

同樣,這是純函數(shù)式編程語言(如Haskell)的想法。一切都是不可變的,這真是太好了,但是這些語言只有它們自己的問題,并且有自己的處理方式。例如,Monad(以及更高種類的類型)可以在這些語言中使用,但是在命令式/面向?qū)ο蟮木幊陶Z言中很少見。

我喜歡在程序存儲器的葉子處具有不變的值。但是,構(gòu)成這些不可變值的代碼實際上構(gòu)成了應(yīng)用程序邏輯,但確實包含可變狀態(tài)。對我來說,這結(jié)合了兩個世界的優(yōu)勢。但是,這似乎是一個優(yōu)先事項。


查看完整回答
反對 回復(fù) 2021-04-21
  • 2 回答
  • 0 關(guān)注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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