Question

Je joue un peu avec ActionScript. Ce que je veux est que je peux afficher une fonction mathématique à partir d'une chaîne.

par exemple. dans mon script python de travail que je fais quelque chose comme ça:

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

Je veux au port ce à ActionScript, mais il semble que il n'y a plus eval depuis la version 3. Comment puis-je calculer mes valeurs de la fonction de toute façon?

Était-ce utile?

La solution

Quelque chose qui pourrait aussi fonctionner dans votre cas, utilise Javascript eval à la place. Vous pouvez utiliser quelque chose comme:

var result = ExternalInterface.call(myEvalFunctionInJS,formula)

pour évaluer les fonctions mathématiques.

Ceci est une solution assez facile et utile que le javascript est assez proche de actionscript.

Si vous mettez l'appel ExternalInterface dans une boucle, il peut devenir lent. Pour éviter cela, vous pouvez écrire la boucle en javascript. (Vous pouvez même écrire le javascript entier à l'intérieur AS3, de sorte que vous n'avez pas besoin de toucher la page html réelle.)

modifier: Voici un lien pour cela.

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

Autres conseils

Vous devrez écrire un eval vous. Vous devrez analyser la chaîne et invoquer les opérateurs droit.

« lien sa pour vous lancer.

Le projet Tamarin a une ECMAScript analyseur écrit ES4. Essayez aussi.

  

« Vous pouvez même écrire le javascript entier à l'intérieur AS3, de sorte que vous n'avez pas besoin de toucher la page html réelle. » Avez-vous des liens / tutoriels? - okoman

Les deux AS et JS sont basés sur la même norme ECMAScript. Donc, si vous passez une chaîne de AS3 à un conteneur et d'utiliser de JS sur cette chaîne <=>, il devrait fonctionner très bien.

Juste remarqué cette question et réalisé que je répondais à peu près la même chose ici: https://stackoverflow.com/a/11460839/ 1449525

Pour me paraphraser, vous pouvez certainement utiliser D.eval , AS3Eval ou ExternalInterface (comme on le voit dans la réponse choisie actuellement) en supposant que vous utilisez dans une page Web. Cependant, tout ce qu'il semble que vous avez vraiment besoin est quelque chose comme ce simple MathParser ( En savoir plus sur MathParser)

Voici comment vous utiliseriez le 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]);
        }
    }
}

Je suis sûr que des choses ExternalInterface fonctionne très bien, mais j'ai des réserves personnelles sur la communication linguistique croisée (notamment en termes d'efficacité et de sécurité), ainsi que juste la nature délicate de celui-ci. Je me sens comme une entièrement contenue, la solution la même langue est généralement préférable dans la plupart des situations.

Un peu en retard, mais pour référence, la bibliothèque D.eval fait ce que vous demandez:

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

Il est gratuit et fonctionne très bien pour moi, mais ne vient pas avec la source. J'ai trouvé cette question à la recherche d'une alternative intégrée ou d'une solution de source disponible.

Il y a aussi un projet apparemment abandonné au port Tamarin s'ÉCLAIR:

http://eval.hurlant.com/

Ce serait génial si plus de progrès a été fait, mais semble comme une curiosité pour l'instant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top