คำถามติดแท็ก yield

อัตราผลตอบแทนคือ (1) คีย์เวิร์ดที่อำนวยความสะดวกในการสร้างฟังก์ชันเครื่องกำเนิดไฟฟ้า (2) คำสั่ง Ruby เพื่อถ่ายโอนการควบคุมจากโครูทีนหนึ่งไปยังอีกตัวหนึ่ง (3) คำสั่ง Java ที่ใช้เพื่อให้ได้ค่าจากนิพจน์สวิตช์

30
คำหลัก "ผลผลิต" ทำหน้าที่อะไร
การใช้yieldคำหลักใน Python คืออะไรและใช้ทำอะไร? ตัวอย่างเช่นฉันพยายามที่จะเข้าใจรหัสนี้1 : def _get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < self._median: yield self._leftchild if self._rightchild and distance + max_dist >= self._median: yield self._rightchild และนี่คือผู้โทร: result, candidates = [], [self] while candidates: node = candidates.pop() distance = node._get_dist(obj) if distance <= max_dist and distance …

17
คำหลักผลตอบแทนที่ใช้ใน C # คืออะไร?
ในวิธีที่ฉันสามารถเปิดเผยเพียงส่วนของ IList <>คำถามหนึ่งในคำตอบที่มีตัวอย่างรหัสต่อไปนี้: IEnumerable<object> FilteredList() { foreach(object item in FullList) { if(IsItemInPartialList(item)) yield return item; } } คำหลักผลตอบแทนทำอะไรที่นั่น? ฉันเคยเห็นมันถูกอ้างถึงในที่แห่งหนึ่งและอีกคำถามหนึ่ง แต่ฉันไม่ได้คิดออกมาเลยว่ามันทำอะไร ฉันเคยคิดถึงการให้ผลผลิตในแง่ของการที่เธรดหนึ่งให้ผลผลิตต่อด้ายอื่น แต่ดูเหมือนจะไม่เกี่ยวข้องกันที่นี่
828 c#  yield 


8
ในทางปฏิบัติแล้วอะไรคือการใช้หลักของซินแท็กซ์ใหม่ "yield from" ใน Python 3.3
ฉันมีช่วงเวลาที่ยากห่อสมองของฉันรอบPEP 380 สถานการณ์ที่ "ผลผลิตจาก" มีประโยชน์คืออะไร กรณีการใช้คลาสสิกคืออะไร? ทำไมจึงเปรียบเทียบกับไมโครกระทู้ [อัพเดท] ตอนนี้ฉันเข้าใจสาเหตุของปัญหาของฉัน ฉันใช้เครื่องกำเนิดไฟฟ้า แต่ไม่เคยใช้ coroutines (แนะนำโดยPEP-342 ) แม้จะมีความคล้ายคลึงกันเครื่องกำเนิดและ coroutines เป็นสองแนวคิดที่แตกต่างกัน การทำความเข้าใจ coroutines (ไม่เพียงกำเนิด) เป็นกุญแจสำคัญในการทำความเข้าใจไวยากรณ์ใหม่ IMHO coroutines เป็นคุณสมบัติของ Python ที่คลุมเครือที่สุดหนังสือส่วนใหญ่ทำให้ดูไร้ประโยชน์และไม่น่าสนใจ ขอบคุณสำหรับคำตอบที่ดี แต่ขอขอบคุณเป็นพิเศษเพื่อAGFและแสดงความคิดเห็นของเขาเชื่อมโยงกับการนำเสนอผลงานของดาวิดบีซ เดวิดหิน
407 python  yield 

23
ฉันจะรอใน Node.js (Javascript) ได้อย่างไรฉันต้องหยุดชั่วคราวเป็นระยะเวลาหนึ่ง
ฉันกำลังพัฒนาคอนโซลเช่นสคริปต์สำหรับความต้องการส่วนบุคคล ฉันต้องหยุดชั่วคราวเป็นระยะเวลานาน แต่จากการวิจัยของฉัน node.js ไม่มีวิธีหยุดตามที่ต้องการ เป็นการยากที่จะอ่านข้อมูลของผู้ใช้หลังจากผ่านไประยะเวลาหนึ่ง ... ฉันได้เห็นโค้ดบางส่วนจากที่นั่น แต่ฉันเชื่อว่าพวกเขาต้องมีโค้ดอื่น ๆ อยู่ภายในเพื่อให้สามารถใช้งานได้เช่น: setTimeout(function() { }, 3000); อย่างไรก็ตามฉันต้องการทุกอย่างหลังจากบรรทัดของรหัสนี้เพื่อดำเนินการหลังจากช่วงเวลา ตัวอย่างเช่น, //start-of-code console.log('Welcome to My Console,'); some-wait-code-here-for-ten-seconds.......... console.log('Blah blah blah blah extra-blah'); //endcode. ฉันเคยเห็นสิ่งต่าง ๆ เช่น yield sleep(2000); แต่ node.js ไม่รู้จักสิ่งนี้ ฉันจะบรรลุการหยุดชั่วคราวแบบขยายนี้ได้อย่างไร


8
IEnumerable และ Recursion โดยใช้ผลตอบแทน
ฉันมีIEnumerable<T>วิธีที่ฉันใช้เพื่อค้นหาการควบคุมในหน้า WebForms วิธีการแบบเรียกซ้ำและฉันมีปัญหาบางอย่างกลับประเภทที่ฉันต้องการเมื่อyield returnเป็นคืนค่าของการโทรซ้ำ รหัสของฉันมีลักษณะดังนี้: public static IEnumerable<Control> GetDeepControlsByType<T>(this Control control) { foreach(Control c in control.Controls) { if (c is T) { yield return c; } if(c.Controls.Count > 0) { yield return c.GetDeepControlsByType<T>(); } } } ขณะนี้มีข้อผิดพลาด "ไม่สามารถแปลงประเภทการแสดงออก" หากอย่างไรก็ตามวิธีการนี้จะคืนค่าชนิดIEnumerable<Object>รหัสจะสร้างขึ้น แต่จะส่งคืนชนิดที่ไม่ถูกต้องในผลลัพธ์ มีวิธีใช้yield returnในขณะที่ใช้การเรียกซ้ำหรือไม่

14
คำหลักผลตอบแทนใน JavaScript คืออะไร?
ฉันได้ยินเกี่ยวกับคำหลัก "ผลผลิต" ใน JavaScript แต่ฉันพบเอกสารที่ไม่ดีเกี่ยวกับมัน ใครสามารถอธิบายฉัน (หรือแนะนำไซต์ที่อธิบาย) การใช้งานและสิ่งที่ใช้สำหรับ

8
เหตุใดจึงต้องใช้คำหลักผลตอบแทนเมื่อฉันสามารถใช้ IEnumerable ธรรมดาได้
รับรหัสนี้: IEnumerable<object> FilteredList() { foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) yield return item; } } ทำไมฉันไม่ควรเขียนโค้ดด้วยวิธีนี้: IEnumerable<object> FilteredList() { var list = new List<object>(); foreach( object item in FullList ) { if( IsItemInPartialList( item ) ) list.Add(item); } return list; } ฉันเข้าใจว่าyieldคำหลักทำอะไร มันบอกให้คอมไพเลอร์สร้างสิ่งที่แน่นอน (ตัววนซ้ำ) …
171 c#  yield 

6
คืน enumerables ทั้งหมดพร้อมผลตอบแทนในทันที โดยไม่ต้องวนซ้ำผ่าน
ฉันมีฟังก์ชั่นต่อไปนี้เพื่อรับข้อผิดพลาดในการตรวจสอบความถูกต้องของการ์ด คำถามของฉันเกี่ยวข้องกับการจัดการกับ GetErrors IEnumerable<ErrorInfo>ทั้งสองวิธีมีผลตอบแทนประเภทเดียวกัน private static IEnumerable<ErrorInfo> GetErrors(Card card) { var errors = GetMoreErrors(card); foreach (var e in errors) yield return e; // further yield returns for more validation errors } เป็นไปได้ไหมที่จะส่งคืนข้อผิดพลาดทั้งหมดGetMoreErrorsโดยไม่ต้องแจงผ่านพวกเขา คิดเกี่ยวกับมันอาจเป็นคำถามที่โง่ แต่ฉันต้องการให้แน่ใจว่าฉันจะไม่ผิด

17
การรีเซ็ตออบเจ็กต์ตัวสร้างใน Python
ฉันมีวัตถุเครื่องกำเนิดไฟฟ้าที่ส่งคืนโดยผลผลิตหลายรายการ การเตรียมการเพื่อเรียกเครื่องมือสร้างนี้ค่อนข้างใช้เวลานาน นั่นคือเหตุผลที่ฉันต้องการใช้ตัวกำเนิดซ้ำหลายครั้ง y = FunctionWithYield() for x in y: print(x) #here must be something to reset 'y' for x in y: print(x) แน่นอนฉันกำลังคำนึงถึงการคัดลอกเนื้อหาลงในรายการง่าย ๆ มีวิธีรีเซ็ตตัวสร้างของฉันหรือไม่?
153 python  generator  yield 

12
C ++ เทียบเท่ากับรูปแบบตัวสร้าง Python
ฉันมีตัวอย่างโค้ด Python ที่ต้องเลียนแบบใน C ++ ฉันไม่ต้องการโซลูชันที่เฉพาะเจาะจงใด ๆ (เช่นโซลูชันผลตอบแทนตามกิจวัตรร่วมแม้ว่าจะเป็นคำตอบที่ยอมรับได้เช่นกัน) แต่ฉันต้องสร้างความหมายในบางลักษณะ หลาม นี่คือตัวสร้างลำดับขั้นพื้นฐานซึ่งมีขนาดใหญ่เกินไปที่จะจัดเก็บเวอร์ชันที่เป็นรูปธรรมอย่างชัดเจน def pair_sequence(): for i in range(2**32): for j in range(2**32): yield (i, j) เป้าหมายคือการรักษาสองอินสแตนซ์ของลำดับข้างต้นและวนซ้ำในช่วงกึ่งล็อค แต่เป็นชิ้น ๆ ในตัวอย่างด้านล่างfirst_passใช้ลำดับของคู่เพื่อเริ่มต้นบัฟเฟอร์และsecond_passสร้างลำดับที่แน่นอนเหมือนกันและประมวลผลบัฟเฟอร์อีกครั้ง def run(): seq1 = pair_sequence() seq2 = pair_sequence() buffer = [0] * 1000 first_pass(seq1, buffer) second_pass(seq2, buffer) ... repeat ... C ++ …

6
มี Java เทียบเท่ากับคีย์เวิร์ด 'yield' ของ C # หรือไม่?
ฉันรู้ว่าไม่มีการเทียบเท่าโดยตรงใน Java แต่อาจเป็นของบุคคลที่สาม? มันสะดวกมาก ตอนนี้ฉันต้องการใช้ตัววนซ้ำที่ให้โหนดทั้งหมดในทรีซึ่งเป็นโค้ดประมาณห้าบรรทัดพร้อมผลตอบแทน
112 java  yield  yield-return 

4
เหตุใดผลตอบแทนจึงไม่ปรากฏในบล็อกลองด้วยการจับ
ต่อไปนี้ไม่เป็นไร: try { Console.WriteLine("Before"); yield return 1; Console.WriteLine("After"); } finally { Console.WriteLine("Done"); } finallyบล็อกทำงานเมื่อสิ่งที่ทั้งได้เสร็จสิ้นการดำเนินการ ( IEnumerator<T>การสนับสนุนIDisposableเพื่อให้วิธีการที่จะให้แน่ใจว่านี้แม้ในขณะที่นับถูกยกเลิกก่อนที่มันจะเสร็จสิ้น) แต่ไม่เป็นไร: try { Console.WriteLine("Before"); yield return 1; // error CS1626: Cannot yield a value in the body of a try block with a catch clause Console.WriteLine("After"); } catch (Exception e) { Console.WriteLine(e.Message); } สมมติว่า …
98 c#  exception  yield 


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.