為什麼那麼多框架都設計有Context?

時間 2021-05-11 14:02:35

1樓:於敬暉

如果在cpu級別,context是cpu的快取,程序一切換context跟著變了;

如果在程式方法層面,context是棧,方法呼叫一結束context就跟著消失了;

如果是程式層面,context可能是乙個全域性map,程式一退出context跟著釋放了;

如果實在系統層面,context是服務治理(eureka、zookeeper),系統一關閉eureka上的服務資訊也就是不見了。

context對內可以理解成乙個全域性範圍儲存,存放著變數、物件、服務,對外卻是乙個生命狀態的表徵。隨著context依賴別人主體誕生而誕生消失而消失。所以不是很多框架設計都有context,而是很多框架都需要這樣乙個內部的儲存空間,恰好起的名字是context。

2樓:Lana Liu

因為很多時候下層函式需要上層函式帶來的一些資訊。比如乙個自頂向下的parser,需要生成一棵ast,這時候一層一層把生成的ast追加在contex裡向下傳遞就很符合直覺,用起來也很簡單,其實就是起到了乙個全域性變數的作用。

3樓:徐辰

說到底你還是需要全域性變數,包起來也好換個名字也好,這麼low的事還是得做。

給low貨加個花邊就是所謂的elegance,程式設計師的最愛。

4樓:劉正

從系統的角度而言,這叫合理的選擇系統範圍,是從歸納到抽象,再到演繹的全過程。

由於任何乙個系統均存在無窮因果鏈,直至追朔到宇宙本質起源問題,這是人力無法研究的,因此,用歸納思想找出共同點,抽象出乙個範圍,將相關引數劃入context,再進行整體演繹,這就形成了最為典型的系統研究方式。

5樓:喬捷

那你應該想想如果沒有context你要怎麼做?

第一種方法是把這些變數都設計成全域性變數,但如果存在多個執行緒或者多個非同步過程要同時跑你的函式,全域性變數的訪問就會衝突,所以這個方法大部分時候是行不通的。

第二種方法是把這些變數放在你的函式引數裡傳遞,如果變數比較多的話引數列表就會很長,怎麼變短一些呢?是不是應該定義個結構體,把這些變數都放到結構體裡去?傳參的時候就傳這個結構就行了。

那麼現在給這個結構起個名字吧,就叫context好了,嗯,就醬。

6樓:Belleve

你看人家 Haskell 就高大上多了,把 Context 藏進 Monad 裡(隨是否可變選用 Reader 或 State),這樣看起來就好看多了,不是麼?

7樓:小擼

因為程式設計的上下文是一種哲學。

看了其他樓主的回覆,認同 @朱元 的解釋,也認同 @劉奕聰 Context 支援巢狀和週期父子的銷毀關係。具體可以看下他們的。

8樓:李遙

這在設計模式裡面有時被稱作「足球模式」

即,整個呼叫鏈把乙個足球從最上層的呼叫者踢到最下層的被呼叫者,然後再一層層踢回來

雖然名字很搞笑,但是複雜度到一定程度的系統都需要或多或少的「足球模式」,因為把足球打散成幾十個變數更愚蠢。即使是函式式程式設計也毫不例外(當然他們的做法是每次複製乙個新球,繼續踢,這樣就immutable了,多棒!)

9樓:方應杭

context 是區域性的全域性變數。

全域性變數是全域性的 context。

我理解 context 就是「你會用到的所有資料的集合」。

就好像語文中的「上下文」就是「為了理解某段話,你需要知道的所有知識的集合」。

如果不用 context 就只能傳參、用事件,或用全域性變數了。

10樓:JackChenIter

因為框架一般都需要支援執行緒/協程/程序/中斷等存在切換執行過程的操作,這就需要在切換前用context來記錄當前程式執行的相關狀態,待重新切換回來時,需要用之前儲存的context來從中斷處繼續執行。還有一點,context並非一定是環境變數或全域性變數,將其當作與執行流程繫結的區域性資料可能會更合適一點。

11樓:藥罐子千里冰封

我覺得就是起個全域性變數的作用,比如視窗的handle,配置檔案的那個不斷和檔案sync的instance。主要是方便從乙個Context改成另乙個,以及多例項共存的時候方便管理,以及總有那麼些東西你要到處傳來傳去(比如涉及UI的,就得有個視窗的handle好往裡面加控制項之類的)。

IntelliJ有Project,Android有Context(大多數時候是Activity嘛),而Eclipse就用的全域性變數。而且API返回的都是那種繼承鏈頂端的幾乎啥也沒有的介面。。

為什麼那麼多男生都喜歡blackpink?

Elvis 因為不僅長得好看直接吸引大量人,而且四個成員都很有歌人特色魅力 有實力所以看多了不煩反而想要更了解。本人準大一男生看法。 twilight040826 因為她們跳舞好看啊,從Playing With Fire的Dance Practice 入坑的 初一時候偶爾看見的,就關注了 就覺得,怎...

為什麼設計行業只有建築設計 大師 那麼多?

道理很簡單嘛,建築設計 包含景觀設計 室內設計 相對來說更趨向於 定製 而其他型別的 設計 其實都是產品,普通人可以購買! 你又不了解這些行業,怎麼可能知道這些行業有沒有大師?你能先了解下這些行業再問問題嗎?只能說,大師作品一般大則博物館歌劇院,更大則摩天大樓,小則別墅住宅,設計的自由度更高,體量大...

為什麼多船體結構具有那麼多優點,但在新設計的大型軍用艦船上看不到大規模應用呢?

飛翔納爾遜 因為優勢這個東西是隨評價體系變化而變化的。評價體系則直接取決自系統目標。雖然新船型有各種優勢,但在目前評價體系下並非全面超越傳統單體船型。而有一項缺陷卻基本上是所有新船型的通病 貴。 Larry Foulke 先說事實 在現役萬噸級以上的軍用艦艇中,的確沒有多船體的設計,然而這並不代表沒...