2012-07-12 57 views

回答

8

虽然你可以使用一个巨大的eval LIB像D.evalAS3Eval,你真正需要的是这样的简单MathParserMore info about the MathParser

这里是你如何使用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, []); 

      // EDIT: In case you wanted variables 
      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]); 
     } 

    } 

} 
+0

ActionScript 3不再支持开箱即用的eval函数,您建议的内容可能仅适用于ActionScript 2. – 2012-07-12 21:25:28

+1

即使在AS2中也不行。 Eval只能用于访问对象的参数 - 这是无用的。 – 2012-07-12 21:43:28

+1

完全重做。第一次回答时,我用了一个旧的,显然不正确的参考。希望你会重新考虑反对票(尽管如果你打算放弃它,让我知道我能做些什么来提供更好的答案) – Patrick 2012-07-14 00:38:09

4

我相信D.eval API是你正在寻找的。

+0

谢谢,田振林。 – Francisc 2012-07-16 18:58:43

1

如果您想避免使用库,您可以尝试使用ExternalInterface.call来访问Javascript的eval函数。

例如:

var formula:String = '1+1'; 
var result:* = ExternalInterface.call('eval', formula); 

您可能要检查是否result == 'undefined'因为这会在公式语法表示这是一个错误。

+0

该应用程序不在浏览器窗口中运行,它仍然可以工作吗? – Francisc 2012-07-12 22:15:34

+1

老实说,我不确定 - 在浏览器之外,我没有太多的AS3经验。在这种情况下,使用第三方库可能会更好。这将运行在哪里? – jalbee 2012-07-12 23:21:36

+0

在桌面上。不确定我可以在那里使用JS,但它确实有捆绑的WebKit发行版。 – Francisc 2012-07-13 10:01:40