Zamknięcie jest funkcją pierwszej klasy, która odwołuje się do (zamyka) zmienne z zakresu, w którym zostało zdefiniowane. Jeśli zamknięcie nadal istnieje po zakończeniu jego definiującego zakresu, zmienne, które zamyka, również będą istnieć.
Spotkałem interesujący problem dotyczący C #. Mam kod jak poniżej. List<Func<int>> actions = new List<Func<int>>(); int variable = 0; while (variable < 5) { actions.Add(() => variable * 2); ++ variable; } foreach (var act in actions) { Console.WriteLine(act.Invoke()); } Oczekuję, że wyniesie 0, 2, 4, 6, 8. Jednak faktycznie …
Czy można mieć funkcję PHP zarówno rekurencyjną, jak i anonimową? To jest moja próba uruchomienia go, ale nie przechodzi w nazwie funkcji. $factorial = function( $n ) use ( $factorial ) { if( $n <= 1 ) return 1; return $factorial( $n - 1 ) * $n; }; print $factorial( …
Użycie metod instancji jako wywołań zwrotnych dla procedur obsługi zdarzeń zmienia zakres thisz „Moje wystąpienie” na „Cokolwiek, co właśnie wywołało wywołanie zwrotne” . Mój kod wygląda tak function MyObject() { this.doSomething = function() { ... } var self = this $('#foobar').bind('click', function(){ self.doSomethng() // this.doSomething() would not work here }) …
Jeśli potrzebuję wywołać te funkcje jedna po drugiej, $('#art1').animate({'width':'1000px'},1000); $('#art2').animate({'width':'1000px'},1000); $('#art3').animate({'width':'1000px'},1000); Wiem, że w jQuery mógłbym zrobić coś takiego: $('#art1').animate({'width':'1000px'},1000,'linear',function(){ $('#art2').animate({'width':'1000px'},1000,'linear',function(){ $('#art3').animate({'width':'1000px'},1000); }); }); Ale załóżmy, że nie używam jQuery i chcę wywołać: some_3secs_function(some_value); some_5secs_function(some_value); some_8secs_function(some_value); Jak powinienem wywołać te funkcje, aby wykonać some_3secs_function, a PO zakończeniu tego wywołania, wykonać …
Podczas badania problemu, który miałem z zamknięciami leksykalnymi w kodzie JavaScript, napotkałem ten problem w Pythonie: flist = [] for i in xrange(3): def func(x): return x * i flist.append(func) for f in flist: print f(2) Zauważ, że ten przykład świadomie unika lambda. Drukuje "4 4 4", co jest zaskakujące. …
Pisząc assertw Swift zauważyłem, że pierwsza wartość jest wpisana jako @autoclosure() -> Bool z przeciążoną metodą w celu zwrócenia Twartości ogólnej , aby przetestować istnienie za pośrednictwem LogicValue protocol. Jednak trzymając się ściśle pytania. Wygląda na to, @autoclosureże chce otrzymać, który zwraca a Bool. Pisanie rzeczywistego zamknięcia, które nie przyjmuje …
W Objective-C możesz zdefiniować wejście i wyjście bloku, zapisać jeden z tych bloków, który jest przekazany do metody, a następnie użyć tego bloku później: // in .h typedef void (^APLCalibrationProgressHandler)(float percentComplete); typedef void (^APLCalibrationCompletionHandler)(NSInteger measuredPower, NSError *error); // in .m @property (strong) APLCalibrationProgressHandler progressHandler; @property (strong) APLCalibrationCompletionHandler completionHandler; - (id)initWithRegion:(CLBeaconRegion …
Mam protokół: enum DataFetchResult { case success(data: Data) case failure } protocol DataServiceType { func fetchData(location: String, completion: (DataFetchResult) -> (Void)) func cachedData(location: String) -> Data? } Z przykładową realizacją: /// An implementation of DataServiceType protocol returning predefined results using arbitrary queue for asynchronyous mechanisms. /// Dedicated to be used …
Odpowiadałem na pytanie o możliwość domknięć (uzasadnionych) wydłużania czasu życia obiektów, kiedy natknąłem się na jakiś niezwykle ciekawy gen kodu ze strony kompilatora C # (4.0, jeśli to ma znaczenie). Najkrótsza reprodukcja, jaką mogę znaleźć, jest następująca: Utwórz lambdę, która przechwytuje lokalną podczas wywoływania metody statycznej typu zawierającego. Przypisz wygenerowane …
Wiele metod Cocoa i CocoaTouch ma wywołania zwrotne zakończenia zaimplementowane jako bloki w Objective-C i Closures w Swift. Jednak podczas wypróbowywania ich w Playground zakończenie nigdy nie jest wywoływane. Na przykład: // Playground - noun: a place where people can play import Cocoa import XCPlayground let url = NSURL(string: "http://stackoverflow.com") …
Próbuję zaimplementować zamknięcie w Pythonie 2.6 i muszę uzyskać dostęp do zmiennej nielokalnej, ale wygląda na to, że to słowo kluczowe nie jest dostępne w Pythonie 2.x. Jak uzyskać dostęp do zmiennych nielokalnych w domknięciach w tych wersjach Pythona?
Jakie są szczególne warunki dla zamknięcia do wdrożenia Fn, FnMutoraz FnOncecechy? To jest: Kiedy zamknięcie nie realizuje FnOncecechy? Kiedy zamknięcie nie realizuje FnMutcechy? Kiedy zamknięcie nie realizuje Fncechy? Na przykład mutacja stanu zamknięcia w jego treści powoduje, że kompilator nie implementuje Fngo.
Chciałbym móc wywołać zamknięcie, które przypisuję bezpośrednio do właściwości obiektu, bez ponownego przypisywania zamknięcia do zmiennej, a następnie wywoływania jej. czy to możliwe? Poniższy kod nie działa i powoduje Fatal error: Call to undefined method stdClass::callback(). $obj = new stdClass(); $obj->callback = function() { print "HelloWorld!"; }; $obj->callback();
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.