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

9
การปิดคืออะไร
ทุกครั้งที่ฉันเห็น "การปิด" ถูกกล่าวถึงและฉันพยายามค้นหา แต่ Wiki ไม่ได้ให้คำอธิบายที่ฉันเข้าใจ มีคนช่วยฉันที่นี่ได้ไหม

5
แลมบ์ดาแสดงออกถึงสิ่งที่มากกว่าคลาสภายในที่ไม่ระบุชื่อด้วยวิธีการเดียวหรือไม่?
มี hype ใหม่พร้อมกับการแสดงออกแลมบ์ดาที่รอคอยมานานใน Java 8; ทุกๆ 3 วันบทความอื่นจะปรากฏพร้อมกับพวกเขาเกี่ยวกับวิธีเจ๋ง ๆ เท่าที่ฉันเข้าใจแลมบ์ดานิพจน์แล้วมันไม่มีอะไรมากไปกว่าคลาสภายในที่ไม่ระบุชื่อด้วยวิธีการเดียว (อย่างน้อยก็ในระดับรหัสไบต์) นอกจากนี้มันยังมาพร้อมกับฟีเจอร์ที่ดีอีกอย่าง - การอนุมานแบบ แต่ฉันเชื่อว่าสิ่งนี้เทียบเท่าได้กับยาชื่อสามัญในบางระดับ เมื่อรู้อย่างนี้แล้วการแสดงออกของแลมบ์ดาจะนำสิ่งที่มากกว่าแค่การสร้างประโยคในภาษาจาวา ฉันสามารถสร้างคลาสที่ทรงพลังและยืดหยุ่นมากขึ้นหรือโครงสร้างเชิงวัตถุอื่น ๆ ด้วยการแสดงออกแลมบ์ดาที่ไม่สามารถสร้างขึ้นด้วยคุณสมบัติภาษาปัจจุบันได้หรือไม่

3
อะไรคือข้อดีและข้อเสียในแนวทางของ C #, Java และ Scala to Closures / Lambdas / …?
ฉันสงสัยว่าสิ่งที่แตกต่างระหว่างดำเนินการทางเทคนิค C # และสกาล่าและวิธีการแก้ปัญหาทั้งเปรียบเทียบกับความคิดของการดำเนินงานและความกังวลเปล่งออกมาในอีเมลPeek อดีตแลมบ์ดาโดยไบรอันเก๊ส่งไปยังรายการทางไปรษณีย์ของโครงการแลมบ์ดา (JSR 335) ? จากอีเมล: เราสำรวจถนนของ "บางที lambdas ควรจะเป็นอินสแตนซ์ของคลาสภายในซึ่งจะง่ายมาก" แต่ในที่สุดก็มาถึงตำแหน่งของ "ฟังก์ชั่นเป็นทิศทางที่ดีกว่าสำหรับอนาคตของภาษา" และต่อไป: มุมมอง lambdas-are-objects ของโลกขัดแย้งกับอนาคตที่เป็นไปได้นี้ มุมมอง lambdas-are-function ของโลกไม่ได้และการรักษาความยืดหยุ่นนี้เป็นหนึ่งในจุดที่สนับสนุน lambdas ที่ไม่ทำให้เกิดภาระด้วยแม้แต่ลักษณะที่ปรากฏของวัตถุ สรุป: Lambdas-are-function เปิดประตู Lambdas-are-objects ปิดพวกเขา เราต้องการเห็นประตูที่เปิดทิ้งไว้ และความคิดเห็นบางส่วนจากบุคคลในเธรด Redditพูดว่า: จริง ๆ แล้วฉันส่งอีเมลถึง Neal Gafter เกี่ยวกับเรื่องนี้และความเข้าใจที่ จำกัด ของฉันเกี่ยวกับการอธิบายของเขา C # และการออกแบบ Java ในปัจจุบันค่อนข้างคล้ายกับที่ผู้ได้รับมอบหมายเป็นวัตถุจริงและไม่ใช่ประเภทการทำงาน ดูเหมือนว่าเขาเชื่อว่า Java ควรเรียนรู้จากข้อเสียของแกะแกะ C # …
30 c#  java  scala  lambda  closures 

6
เหตุใดการปิด JavaScript จึงสำคัญสำหรับ JavaScript
การแสดงออกแลมบ์ดาของ C # ก็มีการปิดเช่นกันแต่ไม่ค่อยมีการพูดคุยกันโดยชุมชนหรือหนังสือ C # ฉันเห็นคน JavaScript และหนังสือพูดถึงการปิดตัวมันมากกว่าที่พวกเขาทำในโลก C # ทำไมถึงเป็นอย่างนั้น?

1
Groovy ปฏิบัติตามหลักการความสอดคล้องของ Tennent หรือไม่?
นี่คือการสนทนาที่น่าสนใจของหลักการการโต้ตอบของ Tennentและคำอธิบายสั้น ๆ จากNeal Gafter : หลักการกำหนดว่าการแสดงออกหรือคำพูดเมื่อห่อในการปิดและเรียกใช้ทันทีควรมีความหมายเช่นเดียวกับก่อนที่จะถูกห่อในการปิด การเปลี่ยนแปลงความหมายใด ๆ เมื่อการปิดโค้ดในการปิดอาจเป็นข้อบกพร่องในภาษา ภาษา Groovy ปฏิบัติตามหลักการนี้หรือไม่

4
จำเป็นต้องมีการรวบรวมขยะหรือไม่สำหรับการดำเนินการปิดอย่างปลอดภัยหรือไม่?
ฉันเพิ่งเข้าร่วมหลักสูตรออนไลน์เกี่ยวกับภาษาการเขียนโปรแกรมซึ่งมีการนำเสนอการปิด ฉันเขียนสองตัวอย่างที่ได้รับแรงบันดาลใจจากหลักสูตรนี้เพื่อให้บริบทก่อนถามคำถาม ตัวอย่างแรกคือฟังก์ชัน SML ที่สร้างรายการตัวเลขจาก 1 ถึง x โดยที่ x คือพารามิเตอร์ของฟังก์ชัน: fun countup_from1 (x: int) = let fun count (from: int) = if from = x then from :: [] else from :: count (from + 1) in count 1 end ใน SML REPL: val countup_from1 = fn : int …

4
การปิดใน Java จะส่งผลกระทบต่อชุมชน Java อย่างไร
เป็นหนึ่งในคุณสมบัติที่ได้รับการกล่าวถึงมากที่สุดเกี่ยวกับ Java: Closures พวกเราหลายคนโหยหาพวกเขา พวกเราบางคน (รวมถึงฉัน) มีความอดทนเพิ่มขึ้นและหันไปใช้ภาษาสคริปต์เพื่อเติมเต็มความว่างเปล่า แต่ในที่สุดเมื่อการปิดมาถึง Java: พวกเขาจะส่งผลกระทบต่อชุมชน Java อย่างไร ความก้าวหน้าของภาษาสคริปต์ที่ตั้งเป้าหมายไว้กับ VM จะช้าลงในการรวบรวมข้อมูลอยู่เหมือนเดิมหรือเพิ่มพูน? ผู้คนจะแห่กันไปยังซินแท็กซ์ปิดใหม่ดังนั้นการเปลี่ยนรหัส Java ให้เป็นโครงสร้างที่มีฟังก์ชั่นการใช้งานมากขึ้นหรือไม่? เราจะเห็นเฉพาะการปิดโปรยใน Java ตลอดไหม? สิ่งที่จะมีผลต่อการสนับสนุนเครื่องมือ / IDE? ประสิทธิภาพเป็นอย่างไร และในที่สุดความหมายของการยอมรับอย่างต่อเนื่องของ Java ในฐานะภาษาคืออะไรเมื่อเทียบกับภาษาอื่น ๆ ที่ได้รับความนิยมเพิ่มขึ้น ในการจัดเตรียมตัวอย่างหนึ่งของรายละเอียดทางไวยากรณ์ Java Closure ที่เสนอล่าสุด: public interface StringOperation { String invoke(String s); } // ... (new StringOperation() { public invoke(String s) …
11 java  closures 

3
การปิดด้วยผลข้างเคียงถูกพิจารณาว่าเป็น "ลักษณะการทำงาน" หรือไม่?
ภาษาโปรแกรมสมัยใหม่จำนวนมากสนับสนุนแนวคิดเรื่องการปิดบางอย่างเช่นโค้ด (บล็อกหรือฟังก์ชัน) ที่ สามารถถือเป็นค่าและเก็บไว้ในตัวแปรส่งผ่านไปยังส่วนต่าง ๆ ของรหัสที่กำหนดไว้ในส่วนหนึ่งของโปรแกรมและเรียกใช้ในส่วนที่แตกต่างกันโดยสิ้นเชิงของโปรแกรมเดียวกัน สามารถจับตัวแปรจากบริบทที่มันถูกกำหนดและเข้าถึงพวกมันเมื่อมันถูกเรียกใช้ในภายหลัง (อาจเป็นในบริบทที่แตกต่างกันโดยสิ้นเชิง) นี่คือตัวอย่างของการปิดที่เขียนใน Scala: def filterList(xs: List[Int], lowerBound: Int): List[Int] = xs.filter(x => x >= lowerBound) ฟังก์ชั่นตัวอักษรx => x >= lowerBoundมีตัวแปรอิสระlowerBoundซึ่งถูกปิด (ผูกพัน) โดยอาร์กิวเมนต์ของฟังก์ชั่นfilterListที่มีชื่อเดียวกัน การปิดจะถูกส่งไปยังวิธีการของไลบรารีfilterซึ่งสามารถเรียกใช้ซ้ำได้ตามฟังก์ชั่นปกติ ฉันได้อ่านคำถามและคำตอบมากมายในเว็บไซต์นี้และเท่าที่ฉันเข้าใจการปิดเทอมมักจะเกี่ยวข้องกับการเขียนโปรแกรมฟังก์ชั่นและรูปแบบการเขียนโปรแกรมการทำงานโดยอัตโนมัติ คำนิยามของฟังก์ชั่นการเขียนโปรแกรมบนวิกิพีเดียอ่าน: ในวิทยาการคอมพิวเตอร์การเขียนโปรแกรมเชิงการทำงานเป็นกระบวนทัศน์การเขียนโปรแกรมที่ปฏิบัติกับการคำนวณเป็นการประเมินฟังก์ชั่นทางคณิตศาสตร์และหลีกเลี่ยงข้อมูลสถานะและไม่แน่นอน มันเน้นการประยุกต์ใช้ฟังก์ชั่นในทางตรงกันข้ามกับรูปแบบการเขียนโปรแกรมจำเป็นซึ่งเน้นการเปลี่ยนแปลงในรัฐ และเพิ่มเติมเกี่ยวกับ [... ] ในโค้ดการทำงานค่าเอาต์พุตของฟังก์ชันขึ้นอยู่กับอาร์กิวเมนต์ที่ป้อนเข้ากับฟังก์ชัน [... ] เท่านั้น การกำจัดผลข้างเคียงสามารถทำให้เข้าใจและคาดการณ์พฤติกรรมของโปรแกรมได้ง่ายขึ้นซึ่งเป็นหนึ่งในแรงจูงใจหลักสำหรับการพัฒนาโปรแกรมเชิงฟังก์ชัน ในทางตรงกันข้ามการปิดโครงสร้างจำนวนมากที่จัดทำโดยภาษาการเขียนโปรแกรมช่วยให้การปิดการจับตัวแปรที่ไม่ใช่ท้องถิ่นและเปลี่ยนแปลงพวกเขาเมื่อปิดการเรียกจึงทำให้เกิดผลข้างเคียงกับสภาพแวดล้อมที่พวกเขาถูกกำหนดไว้ ในกรณีนี้การปิดใช้ความคิดแรกของการเขียนโปรแกรมเชิงฟังก์ชัน (ฟังก์ชั่นเป็นเอนทิตีชั้นหนึ่งที่สามารถเคลื่อนย้ายไปมาเหมือนค่าอื่น ๆ ) แต่ไม่สนใจความคิดที่สอง (หลีกเลี่ยงผลข้างเคียง) การใช้การปิดด้วยผลข้างเคียงนี้ถือเป็นลักษณะการใช้งานหรือเป็นการปิดซึ่งเป็นการสร้างทั่วไปที่สามารถใช้งานได้ทั้งการใช้งานและการเขียนโปรแกรมแบบไม่ทำงาน? …

3
ทำไมจึงมีข่าวลือมากมายเกี่ยวกับการปิด [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน8 ปีที่ผ่านมา เหตุใดจึงมีข่าวลือมากมายเกี่ยวกับการปิดในหมู่นักพัฒนาซอฟต์แวร์ ในอาชีพของฉันฉันไม่เคยใช้มันอย่างตั้งใจ แต่ไม่เข้าใจอย่างชัดเจนว่ามันคืออะไร UPD: เพื่อชี้แจง คำถามคือว่าทำไมแนวคิดการปิดตัวลงจึงช่างพูดคุยกันทุกวันนี้
9 closures 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.