URL: https://www.overclockers.at/coding-stuff/javascript-array-of-functions-parameter_247821/page_1 - zur Vollversion wechseln!
ich parse eine .ini file mit kommandos darin und erstelle ein array von funktionen. manche der kommandos haben zusätzlich einen parameter, z.b.:
die kommandos werden in ein array aus funktionen übersetzt:Code: INI[Commands] command_0 = Wait(500)
das beispiel oben funktioniert wie gewünscht. das beispiel unten nicht: hier ist zur laufzeit die variable "command" (die mit RegEx ausgewertet wird) undefined.Code: JSif (command.match(/^Wait\((.*)\)$/)) //matches Wait(xxx) sequence.commands.push(function() { var time = command.match(/^Wait\((.*)\)$/)[1]; return sleep(time + "ms"); });
Code: JSif (command.match(/^PowerOn(\((.*)\))?$/)) //matches ^PowerOn$ and ^PowerOn(xxx)$ sequence.commands.push(function() { if (command.match(/^PowerOn(\((.*)\))?$/)[2]) { //sets voltage if voltage has been given var voltage = command.match(/^PowerOn\((.*)\)$/)[2] * 10e3; //convert from V to mV setParameter("Voltage", voltage); } return setContact("VCC", true); });
Warum escapst du die Klammern nicht?
command.match(/^PowerOn(?:\((\w+)\))?$/)
Zum Testen würde ich persönlich
verwenden, oder aber zumindest beim Setzen von Voltage aufCode: JS/regexp/.test(string)
(aus meinem Beispiel oben) zurückgreifen, anstatt erneut zu prüfen.Code: JSvar voltage = RegExp.$1;
Ist "command" schon in der ersten Zeile, also beim "PowerOn" match undefined?
Wäre interessant, wie die Variable überhaupt befüllt wird. Sind die beiden checks in der selbem File? Im selben Scope?
die klammern sind optional. falls sie existieren muss ich den wert darin übernehmen.Zitat von JCWarum escapst du die Klammern nicht?
command.match(/^PowerOn(?:\((\w+)\))?$/)
Zum Testen würde ich persönlichverwenden, oder aber zumindest beim Setzen von Voltage aufCode: JS/regexp/.test(string)(aus meinem Beispiel oben) zurückgreifen, anstatt erneut zu prüfen.Code: JSvar voltage = RegExp.$1;
der code oben ist im selben scope (ist eine liste von else if (command.match(x)) {} ), wird aber in einem anderen scope ausgeführt, wo command nicht existiert. ich habe es zuerst mit Wait versucht, und weil das funktioniert hat bin ich davon ausgegangen dass entweder die regex zum zeitpunkt des erstellens ausgewertet wird (und in der funktion dann command nicht mehr benötigt wird) oder command im scope behalten wird. offenbar ist aber beides nicht der fall, deshalb frage ich mich warum das beispiel mit Wait funktioniertZitat von illIst "command" schon in der ersten Zeile, also beim "PowerOn" match undefined?
Wäre interessant, wie die Variable überhaupt befüllt wird. Sind die beiden checks in der selbem File? Im selben Scope?

Die Klammern bilden doch immer eine Capturing Group, außer du escapst sie.Zitat von wergorZitat von illIst "command" schon in der ersten Zeile, also beim "PowerOn" match undefined?
Wäre interessant, wie die Variable überhaupt befüllt wird. Sind die beiden checks in der selbem File? Im selben Scope?
jetzt verstehe ich was du meinst. die klammern werden schon escaped, aber die forensoftware hat die "\" beim posten offenbar gelöscht. die klammern sind optional, falls sie existieren enthält die erste capturing group "(value)" und die zweite "value", deshalb arbeite ich in den skripts nur mit capturing group 2 (ausnahme: "Wait" hat immer die klammern, deshalb ist die regex in den fall etwas anders)
was in den klammern tatsächlich drin steht ist für mich nicht so wichtig - wenn keine zahl übergeben wird wirft das framework beim aufruf der funktion einen fehler und herr dipl.ing. user muss seine .ini files fixen 
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026