Hallo
Ik heb voor mijn plezier een kleine lib gemaakt die Linq-like operaties mogelijk maakt op collecties.
Voor de fun heb ik ook de mogelijkheid geïmplementeerd om te werken met een expressie. (verhoogd mijns inziens ook dikwijls de leesbaarheid omdat je de functiediarree wat kan inperken op het toplevel)
Voorbeeld:
personArray.where(function(x) { return x.name == "John"; } );
OF met expressie
personArray.where("x => x.name == 'John'");
Nu de vraag waar op ik niet direct een bevredigend antwoord vindt: hoe kan ik ervoor zorgen dat mijn nieuwe functie (adhv de expressie) de context krijgt van de locatie waar ze wordt opgeropen.
Voorbeeld (werkt niet aangezien de where functie een nieuwe functie genereert en deze de randomname variabele niet kent)
var randomname = "John";
personArray.where("x => x.name == randomname");
Bovenstaande werkt natuurlijk wél als ik gewoon een functie meegeef als argument.
Ik dacht ergens gelezen te hebben dat ik op geen enkele manier dit kan bewerkstelligen, maar ben hier niet zeker van. Call en apply lijken mij ook niet te bieden wat ik wil, of ben ik hier verkeerde besluiten aan het nemen.
Iemand een idee?
Ik heb voor mijn plezier een kleine lib gemaakt die Linq-like operaties mogelijk maakt op collecties.
Voor de fun heb ik ook de mogelijkheid geïmplementeerd om te werken met een expressie. (verhoogd mijns inziens ook dikwijls de leesbaarheid omdat je de functiediarree wat kan inperken op het toplevel)
Voorbeeld:
personArray.where(function(x) { return x.name == "John"; } );
OF met expressie
personArray.where("x => x.name == 'John'");
Nu de vraag waar op ik niet direct een bevredigend antwoord vindt: hoe kan ik ervoor zorgen dat mijn nieuwe functie (adhv de expressie) de context krijgt van de locatie waar ze wordt opgeropen.
Voorbeeld (werkt niet aangezien de where functie een nieuwe functie genereert en deze de randomname variabele niet kent)
var randomname = "John";
personArray.where("x => x.name == randomname");
Bovenstaande werkt natuurlijk wél als ik gewoon een functie meegeef als argument.
Ik dacht ergens gelezen te hebben dat ik op geen enkele manier dit kan bewerkstelligen, maar ben hier niet zeker van. Call en apply lijken mij ook niet te bieden wat ik wil, of ben ik hier verkeerde besluiten aan het nemen.
Iemand een idee?