Domanda

Sto giocando un po 'con ActionScript. Quello che voglio è che posso visualizzare una funzione matematica da una stringa.

es. nel mio script python di lavoro che faccio una cosa del genere:

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

Voglio quella di portare questo a ActionScript, ma sembra che non ci sia più eval a partire dalla versione 3. Come posso calcolare i miei valori di funzione comunque?

È stato utile?

Soluzione

Qualcosa che potrebbe funzionare anche nel tuo caso, sta utilizzando JavaScript eval invece. È possibile usare qualcosa come:

var result = ExternalInterface.call(myEvalFunctionInJS,formula)

per valutare funzioni matematiche.

Questa è una soluzione un po 'facile e utile come javascript è abbastanza vicino al ActionScript.

Se si mette la chiamata ExternalInterface all'interno di un ciclo, può diventare pigro. Per evitare che, è possibile scrivere il loop in javascript. (Si può anche scrivere l'intero javascript all'interno AS3, in modo che non c'è bisogno di toccare la pagina effettiva html.)

modifica: Ecco un collegamento per questo.

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

Altri suggerimenti

Si dovrà scrivere una eval te stesso. Si dovrà analizzare la stringa e richiamare gli operatori giusti.

Qui 'Link sa per iniziare.

Il progetto Tamarin ha un ECMAScript parser scritto in ES4. Prova anche questo.

  

"Si può anche scrivere l'intero javascript all'interno AS3, in modo che non c'è bisogno di toccare la pagina effettiva HTML." Hai link / tutorial? - okoman

Sia AS e JS sono basate sullo stesso standard ECMAScript. Quindi, se si passa una stringa di AS3 ad un contenitore, e utilizzare JS di <=> su questa stringa, dovrebbe funzionare bene.

Appena notato questa domanda e ho risposto capito quasi la stessa cosa qui: https://stackoverflow.com/a/11460839/ 1449525

Per parafrasare me stesso, si può sicuramente usare D.eval , AS3Eval , o ExternalInterface (come si vede nella risposta attualmente selezionato) supponendo che si sta eseguendo in una pagina web. Tuttavia, tutto sembra che si ha realmente bisogno è qualcosa di simile semplice MathParser ( Altre informazioni sul MathParser )

Ecco come devi usare il MathParser:

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]);
        }
    }
}

Sono sicuro che roba ExternalInterface funziona bene, ma ho delle riserve personali sulla comunicazione linguistica croce (soprattutto in termini di efficienza e sicurezza), così come solo la natura imbarazzante di esso. Mi sento come una soluzione stessa lingua interamente contenuta è in genere preferibile in molte situazioni.

Un po 'in ritardo, ma di rinvio, la libreria D.eval fa quello che stai chiedendo:

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

E 'gratuito e funziona alla grande per me, ma non sono dotati di fonte. Ho trovato questa domanda cerca di un'alternativa built-in o una soluzione sorgente disponibile.

C'è anche un progetto apparentemente abbandonata alla porta Tamarin in Flash stessa:

http://eval.hurlant.com/

Sarebbe fantastico se è stato fatto più progressi, ma sembra come una curiosità, per ora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top