मुझे इस प्रतिक्रिया के हुक कार्यान्वयन को देखते हुए टिप्पणी करें। पृष्ठभूमि के माध्यम से, आंतरिक रूप से हुक प्रत्येक घटक के फाइबर ऑब्जेक्ट पर एक लिंक्ड सूची के रूप में संग्रहीत होते हैं और इस टिप्पणी के अनुसार, प्रत्येक हुक पर अपडेट पहली बार एक गोलाकार लिंक्ड सूची के रूप में संग्रहीत किए जाते हैं।

पहले अपडेट के लिए, क्यू एक सर्कुलर लिंक्ड लिस्ट है जहां queue.last.next = queue.first। एक बार पहला अपडेट आने के बाद, और baseUpdate अब खाली नहीं है, हम सूची को खोल सकते हैं।

मेरा कंप्यूटर विज्ञान का ज्ञान बहुत मजबूत नहीं है और जब तक मैं लिंक्ड सूचियों के बारे में कुछ जानता हूं, मैंने कभी भी "अनरावेल" शब्द नहीं देखा है। कार्यान्वयन को देखते हुए, क्या मैं यह सोचने में सही हूं कि इसका मतलब इसे नियमित रूप से लिंक की गई सूची में वापस करना है?

4
Carl Mungazi 11 जिंदा 2020, 05:00

1 उत्तर

सबसे बढ़िया उत्तर

आप जिस पूर्ण संदर्भ का जिक्र कर रहे हैं वह है:

// The last update in the entire queue
const last = queue.last;
// The last update that is part of the base state.
const baseUpdate = hook.baseUpdate;
const baseState = hook.baseState;

// Find the first unprocessed update.
let first;
if (baseUpdate !== null) {
  if (last !== null) {
    // For the first update, the queue is a circular linked list where
    // `queue.last.next = queue.first`. Once the first update commits, and
    // the `baseUpdate` is no longer empty, we can unravel the list.
    last.next = null;
  }
  first = baseUpdate.next;
} else {
  first = last !== null ? last.next : null;
}

आपकी सोच सही है; last.next = null; सर्कुलर लिंक्ड लिस्ट को last.next रेफरेंस null सेट करके "अनसुलझा" करता है जो इसे लूप के बजाय एक लीनियर चेन में बदल देता है।

शब्दावली के लिए, मुझे नहीं लगता कि यह विशेष रूप से आम है और कुछ वेब खोज के साथ कोई प्रत्यक्ष उदाहरण नहीं दिखता है, इसलिए संभवत: यह कुछ ऐसा है जो वे मौके पर लेकर आए हैं ताकि यह वर्णन किया जा सके कि कोड आकस्मिक तरीके से क्या करता है।

1
ggorlen 11 जिंदा 2020, 02:26