11
votes

Quelqu'un peut-il m'expliquer quelle fermeture est en véritable langage simple?

Duplicaté possible:

Quelles sont les "fermetures" dans .net?

Je suis actuellement en train de regarder l'expression de Lambda et le mot fermeture continue à venir. Quelqu'un peut-il m'expliquer dans une vraie langue simple.


7 commentaires

Si vous avez un homme de 5 ans intelligent, alors "une fermeture est une fonction de première classe avec des variables libres liées dans l'environnement lexical".


Uhm, tu n'es pas? Laissez votre enfant jouer avec d'autres enfants à la place ... (Remarque: le titre stupide donne des réponses stupides ...)


Si vous avez la capacité mentale d'un enfant de 5 ans, des chances sont élevées que vous ne comprenez pas la fermeture.


Si vous avez la capacité mentale d'un enfant de 5 ans, des chances sont élevées que vous ne comprenez aucune de ces réponses.


@Jespere: C'est moi. Merci!


Une question similaire, qui motive toutefois la partie "de 6 ans"; Notez le résultat complètement différent! Stackoverflow.com/questions/111102/...


Si vous avez un vieille très intelligent de 5 ans, alors "Vous ne serez jamais posé si vous continuez à poser ces questions". Problème résolu.


9 Réponses :


20
votes

Je dirais que cela est un duplicata de: Quelles sont les "fermetures" dans .net?

"En substance, une fermeture est un bloc de code qui peut être exécuté ultérieurement, mais qui maintient l'environnement dans lequel il a été créé pour la première fois - c'est-à-dire qu'il peut toujours utiliser les variables locales, etc. de la méthode qui l'a créée. , même après que cette méthode a fini d'exécuter. "


3 commentaires

Cela devrait vraiment être un commentaire. Bon moyen de la réputation du lait. : P


Alors, qu'est-ce qui aurait été la chose appropriée à faire pour R Jorge?


Quel âgé de 5 ans va-t-il comprendre de cela?



12
votes

Vos chaussures sont dans le hall; ton la veste est dans la cuisine. Mettez-les sur, et vos gants (ils sont dans le tiroir), quand on va dehors.

Vous pouvez maintenant aller jouer avec vos voitures. À onze heures, vous devez aller acheter quelques pain dans le magasin d'angle.

Kid joue. Oublie tout le monde.

réveil s'éteint; Kid voit: onze heures! Oh - sortez à l'extérieur pour acheter du pain en utilisant la fermeture "Aller à l'extérieur".


4 commentaires

La plupart des enfants apprennent à raconter le temps un peu plus tard que 5. Ils sont juste occupés à apprendre des chiffres 1-10 âgés de 5 ans. Juste Sayin '. ;-)


Ils écouteront la sonnerie. Mais c'est à propos de programmation enfants, ils font des mathématiques de base à 5 (bien qu'ils ne puissent pas mettre leurs chaussures par elles-mêmes ...)


Le mien continue de nettoyer leur cache de fermeture ... :(


Donc, le gamin arrive au magasin à 23h et trouve le magasin a subi une fermeture et n'est plus ouverte? Je pensais que c'est là que nous allions ici ...



5
votes

Si vous avez vraiment besoin de le garder simple, alors une fermeture est une fonction avec son contexte . La fonction de fermeture peut toujours accéder aux mêmes variables qu'elle pourrait quand elle a été définie, peu importe où vous l'appelez. (À Lua, ceux-ci sont appelés upvalues ​​, que je pense est un terme très descriptif.)

J'ai rencontré le concept d'abord à Lua, et cette définition m'a aidé à comprendre le concept. Peut-être jeter un coup d'œil à Lua: sa simplicité et sa puissance sont fascinantes et contribuent certainement à développer une certaine vue dans d'autres langues. Son concept de fermetures serait un bon exemple à cela.


0 commentaires

2
votes

Fermeture (informatique) dit:

en informatique, Une fermeture est une fonction de première classe avec des variables libres qui sont liées dans l'environnement lexical. P>

Traduction: strong>

Fermetures proches / attachez les variables autour de la fonction, de sorte que cette fonction puisse être téléportée quelque part ailleurs et toujours utiliser ces variables. par exemple. Supposons que vous soyez téléporté à un emplacement éloigné mais vous avez toujours accès à votre tasse Coffed sur votre table p>

Exemple: strong> p>

function makefunc(x)
{
    return function(){return x}
}


2 commentaires

Si makefunc lue x = 42 , cela reviendrait-il à l'existence de l'environnement alors courant?


@ René Nyffenegger, je ne comprends pas, mais avec différentes valeurs de x différents funcs anonymes seront retournés liés à différents x



0
votes

Lorsque vous savez faire quelque chose en général, vous pouvez spécifier certains détails (ou tous) et obtenir une fermeture . .

Par exemple, vous savez acheter de la glace. Vous savez quoi faire si vous serez devant n'importe quel magasin . Mais si vous voulez aller dans un magasin particulier (par exemple, en raison d'une remise du dimanche), vous déménagez à la maison dans le but d'acheter des glaces . "Achetez des glaces dans un magasin au coin" est une fermeture de "Acheter des glaces". En fait, toutes ces fermetures sont des fermetures "Acheter une certaine glace quelque part":

  • Achetez des glaces au coin
  • Achetez deux glaces
  • Achetez deux glaces au coin

    Maintenant, allez jouer avec vos amis, fils! (Et je garde à l'esprit de ne rien dire comme ça devant les enfants)


1 commentaires

Ou, est-ce que je l'ai mélangé avec une projection?



4
votes

Si les 5 ans savaient C #, j'expliquerais avec cet exemple de code:

string name = null;
IEnumerable<Customer> query = Customers.Where(c => c.Name == name);
name = "Bob";
 // query is resolved when enumerated (which is now)
 // Where will now call our anonymous method.
foreach(var customer in query)
{
  Console.WriteLine(customer.Name);
}


3 commentaires

+1 - LINQ est maintenant une exigence de base de base de base dans les écoles britanniques.


@Dominicrodger vraiment? Pouvez-vous fournir une certaine preuve de cela?


@LifeBalance - Cela fait cinq ans, mais je pense Je plaisantais.



11
votes

J'aime le exemple Google pour JavaScript (vous peut le transformer pour C # facilement). Ce n'est pas quelque chose de 5 ans comprendrait mais je doute que je doute une moyenne de 5 ans de 5 ans comprenne quelle était une fonction.

/*
* When a function is defined in another function and it
*    has access to the outer function's context even after
*    the outer function returns
* An important concept to learn in Javascript
*/

function outerFunction(someNum) {
  var someString = 'Hai!';
  var content = document.getElementById('content');
  function innerFunction() {
    content.innerHTML = someNum + ': ' + someString;
    content = null; // IE memory leak for DOM reference
  }
  innerFunction();
}


1 commentaires

la fonction intérieure n'est toutefois pas disponible après les retours de fonctionnement extérieurs; Ce qui est montré qu'il y ait possible sans fermetures, cela peut être fait même à Pascal et Java!



8
votes

La réponse ci-dessous concernait le libellé d'origine qui s'apparente à "Comment expliquer la fermeture à un enfant de 5 ans".

Prenez cette boîte de Legos; construire vous-même Un joli petit métier spatial. Quand tu vas à la maison de Billy et apporter votre espace artisanat là-bas; avec des fermetures que vous pouvez toujours peut utiliser toutes les pièces de votre boîte de Legos, même si la boîte a été laissée dans votre chambre.


2 commentaires

Merci! :) Mais ne peut pas comprendre comment puis-je utiliser toutes les pièces de votre boîte de Legos, même si la boîte était laissée dans votre chambre à coucher. Cette boîte n'est pas dans la maison de Billy et je ne peux pas aller chez moi de la maison de Billy immédiatement.


Comment une fermeture est mise en œuvre par une langue est en dehors du champ d'application de la question. En quoi cela n'est pas aussi important que ce que vous pouvez faire avec une fermeture.



0
votes

C'est une approche simple de l'idée en C #: Fermeture < / a>


0 commentaires