Att skapa ett exekverings träd
Hej,
Jag har ett hyfsat komplext problem som jag inte riktigt vet hur man ska hantera. Jag håller på med ett Open Source-projekt. Vi använder Python som skriptspråk via IronPython (.NET tolk för Python).
Användaren av programmet kan skripta input och output från vårt program via skript. Tex
mouse.deltaX = filters.delta(joystick[0].x)
Koden ovan tar det absoluta värdet från en jojje eller gamepad och räknar ut deltavärdet via util-metoden filters.delta sedan sätter jag det relativa värdet på musen via mouse.deltaX
Det är filters.delta som är problemet
För att filters.delta ska fungera måste den spara undan föregående värde, detta sker genom att man skickar med en nyckel som argument
[NeedIndexer]
public double delta(double x, string indexer)
{
var lastSample = x;
if (deltaLastSamples.ContainsKey(indexer))
lastSample = deltaLastSamples[indexer];
deltaLastSamples[indexer] = x;
return x - lastSample;
}
Som ni ser i python-skriptet ovan så behöver man inte skicka med nyckeln, detta beror på att jag preparsar skriptet innan körning och skapar en nyckel baserat på input till metoden. Så skriptet ovan kommer se ut såhär
mouse.deltaX = filters.delta(joystick[0].x, "joystick[0].x")
I detta fall fungerar min lösning därför att joystick[0].x är en unik nyckel, men låt oss säga att användaren skapar en metod
def foo(x):
return filters.delta(x)
mouse.deltaX = foo(joystick[0].x)
Detta kommer att betyder oberoende av vad vi skickar in till foo så kommer nyckeln "x" användas.
Jag måste på nått snyggt sätt skapa ett exekveringsträd och få med hela kedjan som nyckel "foo(joystick[0].x)>filters.delta(x)"
Någon som har erfarenhet av detta? Måste erkänna att jag glömt det mesta man lärde sig om kompilatorer på KTH
edit: Koden som den ser ut idag
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE...