Frage

Ich spiele um ein bisschen mit Actionscript. Was ich will, ist, dass ich eine mathematische Funktion aus einer Zeichenfolge angezeigt werden kann.

z. in meinem Arbeits Python-Skript kann ich etwas wie folgt aus:

formula = 'x**2 + 3*x'
for x in range( 0, 100 ):
    y = eval( formula )
    graph.display( x, y )

ich zu portieren möchten diese in Actionscript, aber es scheint, als gäbe es nicht mehr eval ist seit Version 3. Wie kann ich sowieso meine Funktionswerte berechnen?

War es hilfreich?

Lösung

Etwas, das auch in Ihrem Fall funktionieren kann, wird anstelle Javascript eval. Sie können so etwas wie verwenden:

var result = ExternalInterface.call(myEvalFunctionInJS,formula)

mathematische Funktionen bewerten.

Dies ist eine etwas einfache und nützliche Abhilfe wie Javascript Actionscript ganz in der Nähe ist.

Wenn Sie die ExternalInterface Anruf innerhalb einer Schleife setzen, kann es träge werden. Um zu vermeiden, dass können Sie die Schleife in Javascript schreiben. (Sie können sogar die gesamte Javascript innerhalb AS3 schreiben, so dass Sie nicht über die tatsächliche HTML-Seite berühren müssen.)

edit: Hier ist ein Link für die.

http://www.actionscript.org/resources/articles/745/2/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page2.html

Andere Tipps

In Kürze erhalten Sie haben eine eval selbst zu schreiben. Sie werden die Zeichenfolge zu analysieren haben und die richtigen Operatoren aufrufen.

Hier ‚sa Link zum Einstieg.

Das Tamarin-Projekt hat eine ECMAScript Parser geschrieben in ES4. Versuchen Sie dies auch.

  

„Sie können sogar die gesamte Javascript innerhalb AS3 schreiben, so dass Sie nicht über die tatsächliche HTML-Seite berühren müssen.“ Haben Sie Links / tutorials? - okoman

Sowohl AS und JS auf demselben ECMAScript-Standard. Also, wenn Sie eine Reihe von AS3 in einen Behälter übergeben, und verwenden JS des eval auf dieser Zeichenfolge, sollte es gut funktionieren.

habe gerade bemerkt, diese Frage und erkannte, antwortete ich fast genau die gleiche Sache hier: https://stackoverflow.com/a/11460839/ 1449525

In Anlehnung an mich, können Sie auf jeden Fall verwenden D.eval , AS3Eval oder ExternalInterface (wie in der aktuell gewählten Antwort gesehen) vorausgesetzt, Sie auf einer Webseite ausführen. Doch alle es scheint, wie Sie wirklich brauchen, ist so etwas wie dieses einfache MathParser ( Mehr Infos über die MathParser )

Hier ist, wie Sie die MathParser verwenden würde:

package {
    import bkde.as3.parsers.*;
    import flash.display.Sprite;
    public class MathTest extends Sprite {
        public function MathTest() {
            var parser:MathParser = new MathParser([]);
            var compiledObj:CompiledObject = parser.doCompile("(10/3)*4+10");
            var answer:Number = parser.doEval(compiledObj.PolishArray, []);

            var xyParser:MathParser = new MathParser(["x", "y"]);
            var xyCompiledObj:CompiledObject = xyParser.doCompile("(x/3)*y+10");
            var xyAnswer:Number = xyParser.doEval(xyCompiledObj.PolishArray, [10, 4]);
        }
    }
}

Ich bin sicher, ExternalInterface Zeug funktioniert ganz gut, aber ich habe persönliche Vorbehalte gegen die Quersprachkommunikation (vor allem in Bezug auf die Effizienz und Sicherheit) sowie nur die peinliche Art davon. Ich fühle mich wie eine ganz geschlossene, gleich Sprache Lösung in den meisten Situationen typischerweise vorzuziehen ist.

Ein bisschen spät, aber als Referenz, die D.eval Bibliothek tut, was Sie fordern:

http://www.riaone.com/products/deval/

Es ist kostenlos und funktioniert gut für mich, aber mit Quelle nicht kommt. Ich fand diese Frage nach einer Alternative sucht eingebaute oder Quelle-Lösung zur Verfügung.

Es gibt auch ein scheinbar verlassenen Projekt Port Tamarin selbst in Flash:

http://eval.hurlant.com/

Wäre super, wenn mehr Fortschritte gemacht, aber es scheint wie eine Kuriosität für jetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top