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

การปิดเป็นฟังก์ชั่นชั้นหนึ่งที่อ้างถึงตัวแปร (ปิด) กว่าจากขอบเขตที่มันถูกกำหนด หากการปิดยังคงมีอยู่หลังจากขอบเขตการกำหนดสิ้นสุดลงตัวแปรที่ปิดลงจะยังคงมีอยู่เช่นกัน

7
การปิดใน Java 7 [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ การปิดคืออะไร? มันควรจะรวมอยู่ใน Java 7 (มีการพูดถึงการปิดเพื่อรวมไว้ใน Java 7 แต่ในท้ายที่สุดก็ไม่รวม -ed)ใครช่วยให้ข้อมูลอ้างอิงที่เชื่อถือได้จากที่ที่ฉันสามารถเรียนรู้เกี่ยวกับการปิดได้บ้าง?
105 java  closures 

4
ตัวแปรภายในในฟังก์ชันที่ซ้อนกัน
โอเคทนกับฉันในเรื่องนี้ฉันรู้ว่ามันจะดูสับสนอย่างมาก แต่โปรดช่วยฉันเข้าใจว่าเกิดอะไรขึ้น from functools import partial class Cage(object): def __init__(self, animal): self.animal = animal def gotimes(do_the_petting): do_the_petting() def get_petters(): for animal in ['cow', 'dog', 'cat']: cage = Cage(animal) def pet_function(): print "Mary pets the " + cage.animal + "." yield (animal, partial(gotimes, pet_function)) funs = list(get_petters()) for name, f in …

7
บล็อกบน Swift (animateWithDuration: ภาพเคลื่อนไหว: เสร็จสิ้น :)
ฉันมีปัญหาในการทำให้บล็อกทำงานบน Swift นี่คือตัวอย่างที่ใช้งานได้ (ไม่มีการบล็อกที่สมบูรณ์): UIView.animateWithDuration(0.07) { self.someButton.alpha = 1 } หรืออีกทางเลือกหนึ่งโดยไม่ต้องปิดท้าย: UIView.animateWithDuration(0.2, animations: { self.someButton.alpha = 1 }) แต่เมื่อฉันพยายามเพิ่มบล็อกการทำให้สมบูรณ์มันก็ไม่ได้ผล: UIView.animateWithDuration(0.2, animations: { self.blurBg.alpha = 1 }, completion: { self.blurBg.hidden = true }) การเติมข้อความอัตโนมัติช่วยให้ฉันcompletion: ((Bool) -> Void)?แต่ไม่แน่ใจว่าจะใช้งานได้อย่างไร ลองด้วยการปิดท้ายด้วย แต่มีข้อผิดพลาดเดียวกัน: ! Could not find an overload for 'animateWithDuration that accepts the supplied …
102 ios  swift  closures 

1
การเข้าถึงการปิดดัดแปลง (2)
นี้เป็นส่วนขยายของคำถามจากการเข้าถึงปิดดัดแปลง ฉันแค่ต้องการตรวจสอบว่าสิ่งต่อไปนี้ปลอดภัยเพียงพอสำหรับการใช้งานจริงหรือไม่ List<string> lists = new List<string>(); //Code to retrieve lists from DB foreach (string list in lists) { Button btn = new Button(); btn.Click += new EventHandler(delegate { MessageBox.Show(list); }); } ฉันดำเนินการผ่านด้านบนเพียงครั้งเดียวต่อการเริ่มต้นระบบ ตอนนี้ดูเหมือนว่าจะทำงานได้ดี ดังที่จอนได้กล่าวไว้เกี่ยวกับผลการต่อต้านในบางกรณี ฉันต้องระวังอะไรที่นี่? จะเป็นไรไหมถ้ารายการถูกเรียกใช้มากกว่าหนึ่งครั้ง
101 c#  .net  resharper  closures 

2
ทำไมเราถึงต้องการเส้นใย
สำหรับ Fibers เรามีตัวอย่างคลาสสิก: การสร้างตัวเลข Fibonacci fib = Fiber.new do x, y = 0, 1 loop do Fiber.yield y x,y = y,x+y end end ทำไมเราถึงต้องการเส้นใยที่นี่? ฉันสามารถเขียนสิ่งนี้ใหม่ได้ด้วย Proc เดียวกัน (จริงๆแล้วการปิด) def clsr x, y = 0, 1 Proc.new do x, y = y, x + y x end end ดังนั้น 10.times { …
101 ruby  lambda  closures  fibers  proc 

2
Swift @escaping and Completion Handler
ฉันพยายามทำความเข้าใจ 'การปิด' ของ Swift ให้แม่นยำยิ่งขึ้น แต่@escapingและCompletion Handlerยากเกินกว่าที่จะเข้าใจ ฉันค้นหาการโพสต์และเอกสารอย่างเป็นทางการของ Swift มากมาย แต่ฉันรู้สึกว่ามันยังไม่เพียงพอ นี่คือตัวอย่างรหัสของเอกสารราชการ var completionHandlers: [()->Void] = [] func someFunctionWithEscapingClosure(completionHandler: @escaping ()->Void){ completionHandlers.append(completionHandler) } func someFunctionWithNoneescapingClosure(closure: ()->Void){ closure() } class SomeClass{ var x:Int = 10 func doSomething(){ someFunctionWithEscapingClosure { self.x = 100 //not excute yet } someFunctionWithNoneescapingClosure { x = 200 …
101 swift  escaping  closures 

6
รูปแบบ JavaScript นี้เรียกว่าอะไรและเหตุใดจึงใช้
ฉันกำลังศึกษาTHREE.jsและสังเกตเห็นรูปแบบที่มีการกำหนดฟังก์ชันดังนี้: var foo = ( function () { var bar = new Bar(); return function ( ) { //actual logic using bar from above. //return result; }; }()); (ตัวอย่างดูวิธีการ raycast ที่นี่ ) ปกติรูปแบบของวิธีการดังกล่าวจะมีลักษณะเช่นนี้ var foo = function () { var bar = new Bar(); //actual logic. //return result; }; การเปรียบเทียบเวอร์ชันแรกกับรูปแบบปกติเวอร์ชันแรกดูเหมือนจะแตกต่างกันในสิ่งนั้น: …

2
การเข้าถึงตัวแปรภายนอกโดยใช้ฟังก์ชันนิรนามเป็นพารามิเตอร์
โดยทั่วไปฉันใช้ฟังก์ชันที่มีประโยชน์นี้เพื่อประมวลผลแถว db (ปิดตาที่ PDO และ / หรือสิ่งอื่น ๆ ) function fetch($query,$func) { $query = mysql_query($query); while($r = mysql_fetch_assoc($query)) { $func($r); } } ด้วยฟังก์ชั่นนี้ฉันสามารถทำได้: fetch("SELECT title FROM tbl", function($r){ //> $r['title'] contains the title }); สมมติว่าตอนนี้ฉันต้องการเชื่อมต่อทั้งหมด$r['title']ใน var (นี่เป็นเพียงตัวอย่าง) ฉันจะทำอย่างนั้นได้อย่างไร? ฉันกำลังคิดอะไรแบบนี้ แต่มันก็ไม่ได้สวยหรูมากนัก: $result = ''; fetch("SELECT title FROM tbl", function($r){ global $result; …
95 php  closures  scope 

1
คำเตือน Cell-var-from-loop จาก Pylint
สำหรับรหัสต่อไปนี้: for sort_key, order in query_data['sort']: results.sort(key=lambda k: get_from_dot_path(k, sort_key), reverse=(order == -1)) Pylint รายงานข้อผิดพลาด: Sort_key ตัวแปรของเซลล์ที่กำหนดไว้ในลูป (cell-var-from-loop) ใครช่วยให้คำใบ้ว่าเกิดอะไรขึ้นที่นี่? จากซอร์สโค้ด pylint คำอธิบายคือ: ตัวแปรที่ใช้ในการปิดถูกกำหนดในลูป ซึ่งจะส่งผลให้การปิดทั้งหมดโดยใช้ค่าเดียวกันสำหรับตัวแปรปิด แต่ฉันไม่รู้ว่ามันหมายถึงอะไร ใครช่วยยกตัวอย่างปัญหาได้ไหม

10
คุณทดสอบฟังก์ชันและการปิดเพื่อความเท่าเทียมกันอย่างไร?
หนังสือเล่มนี้ระบุว่า "ฟังก์ชันและการปิดเป็นประเภทอ้างอิง" แล้วคุณจะทราบได้อย่างไรว่าข้อมูลอ้างอิงเท่ากัน? == และ === ไม่ทำงาน func a() { } let å = a let b = å === å // Could not find an overload for === that accepts the supplied arguments

12
ตัวชี้ฟังก์ชันการปิดและแลมด้า
ตอนนี้ฉันเพิ่งเรียนรู้เกี่ยวกับตัวชี้ฟังก์ชันและในขณะที่ฉันกำลังอ่านบท K&R ในเรื่องนี้สิ่งแรกที่โดนใจฉันคือ "เฮ้นี่มันเหมือนกับการปิด" ฉันรู้ว่าสมมติฐานนี้ผิดโดยพื้นฐานแล้วและหลังจากการค้นหาทางออนไลน์ฉันไม่พบการวิเคราะห์ใด ๆ เกี่ยวกับการเปรียบเทียบนี้เลย เหตุใดตัวชี้ฟังก์ชันสไตล์ C จึงแตกต่างจากการปิดหรือแลมบ์ดาโดยพื้นฐาน? เท่าที่ฉันสามารถบอกได้ว่ามันเกี่ยวข้องกับความจริงที่ว่าตัวชี้ฟังก์ชันยังคงชี้ไปที่ฟังก์ชันที่กำหนด (ชื่อ) ซึ่งตรงข้ามกับการฝึกกำหนดฟังก์ชันโดยไม่ระบุตัวตน เหตุใดการส่งผ่านฟังก์ชันไปยังฟังก์ชันจึงถูกมองว่ามีประสิทธิภาพมากกว่าในกรณีที่สองโดยที่ไม่มีชื่อมากกว่าฟังก์ชันแรกที่เป็นเพียงฟังก์ชันปกติในชีวิตประจำวันที่ถูกส่งผ่าน โปรดบอกฉันว่าทำไมฉันถึงคิดผิดที่เปรียบเทียบทั้งสองอย่างใกล้ชิด ขอบคุณ.

6
ดูเหมือนว่าชื่อแทนฟังก์ชัน JavaScript จะไม่ทำงาน
ฉันเพิ่งอ่านคำถามนี้และต้องการลองใช้วิธีนามแฝงมากกว่าวิธีการห่อหุ้มฟังก์ชัน แต่ดูเหมือนว่าฉันจะไม่สามารถใช้งานได้ทั้งใน Firefox 3 หรือ 3.5beta4 หรือ Google Chrome ทั้งในหน้าต่างแก้ไขข้อบกพร่องและ ในหน้าเว็บทดสอบ Firebug: >>> window.myAlias = document.getElementById function() >>> myAlias('item1') >>> window.myAlias('item1') >>> document.getElementById('item1') <div id="item1"> หากฉันวางไว้ในหน้าเว็บการเรียกใช้ myAlias ​​ทำให้ฉันเกิดข้อผิดพลาดนี้: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: file:///[...snip...]/test.html :: <TOP_LEVEL> :: line 7" …

13
คุณสามารถอธิบายการปิด (ที่เกี่ยวข้องกับ Python) ได้หรือไม่?
ฉันอ่านเกี่ยวกับการปิดตัวเองมามากและฉันคิดว่าฉันเข้าใจพวกเขา แต่หากไม่ทำให้ภาพขุ่นมัวของตัวฉันและคนอื่น ๆ ฉันหวังว่าจะมีใครสักคนอธิบายการปิดได้อย่างกระชับและชัดเจนที่สุด ฉันกำลังมองหาคำอธิบายง่ายๆที่อาจช่วยให้ฉันเข้าใจว่าที่ไหนและทำไมฉันถึงต้องการใช้

3
ค่าปิดของแลมบ์ดาสามารถส่งผ่านเป็นพารามิเตอร์อ้างอิง rvalue ได้
ฉันพบว่าการlvalueปิดแลมบ์ดาสามารถส่งผ่านเป็นrvalueพารามิเตอร์ฟังก์ชันได้เสมอ ดูการสาธิตง่ายๆดังต่อไปนี้ #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a `lvalue` function object std::function<void()> fn2 = []{}; foo(fn2); // compile error return 0; } …

2
เพราะเหตุใด `std :: mem :: drop` จึงเหมือนกับการปิด | _ | () ในขอบเขตที่สูงกว่า
การใช้งานของstd::mem::dropเอกสารจะเป็นดังต่อไปนี้: pub fn drop<T>(_x: T) { } ดังนั้นฉันจึงคาดหวังว่าการปิด|_| ()(หรือที่รู้จักกันในชื่อการปิดห้องน้ำ ) จะเป็น 1: 1 ที่มีศักยภาพในการทดแทนdropทั้งสองทิศทาง อย่างไรก็ตามรหัสด้านล่างแสดงให้เห็นว่าdropไม่เข้ากันกับลักษณะการจัดอันดับที่สูงกว่าที่ถูกผูกไว้กับพารามิเตอร์ของฟังก์ชั่นในขณะที่การปิดห้องน้ำเป็น fn foo<F, T>(f: F, x: T) where for<'a> F: FnOnce(&'a T), { dbg!(f(&x)); } fn main() { foo(|_| (), "toilet closure"); // this compiles foo(drop, "drop"); // this does not! } ข้อความแสดงข้อผิดพลาดของคอมไพเลอร์: error[E0631]: type mismatch …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.