代码之家  ›  专栏  ›  技术社区  ›  okoman

AS3中的评估公式?

  •  2
  • okoman  · 技术社区  · 17 年前

    例如,在我的工作python脚本中,我做了如下操作:

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

    我想将其移植到ActionScript,但似乎从第3版开始就不再有eval了。我如何计算我的函数值呢?

    5 回复  |  直到 17 年前
        1
  •  3
  •   Mikko Tapionlinna    17 年前

    var result = ExternalInterface.call(myEvalFunctionInJS,formula)

    评估数学函数。

    这是一个比较简单和有用的解决方法,因为javascript非常接近actionscript。

    如果将ExternalInterface调用放入循环中,它可能会变得迟钝。为了避免这种情况,可以用javascript编写循环。(您甚至可以在as3中编写整个javascript,这样就不需要触摸实际的html页面。)

    编辑:

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

        2
  •  2
  •   dirkgently    17 年前

    你必须写一封信 eval 你自己您必须解析字符串并调用正确的运算符。

    Here 这是一个让您开始的链接。

    parser 用ES4编写。也试试这个。

    “您甚至可以在as3中编写整个javascript,这样您就不需要接触实际的html页面。”您有链接/教程吗?奥科曼

    AS和JS都基于相同的ECMAScript标准。因此,如果您将AS3字符串传递给容器,并使用JS

        3
  •  2
  •   Community Mohan Dere    9 年前

    注意到这个问题,我意识到我在这里回答了几乎完全相同的问题: https://stackoverflow.com/a/11460839/1449525

    用我自己的话来说,你绝对可以用 D.eval AS3Eval ,或外部接口(如当前选择的答案所示),假设您正在网页中运行。然而,看起来你真正需要的是这样简单的东西 MathParser ( More info about the 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]);
            }
        }
    }
    

    我确信外部接口的东西很好用,但我个人对跨语言交流(特别是在效率和安全性方面)以及它的尴尬性质持保留态度。我觉得在大多数情况下,一个完全包含的、相同语言的解决方案通常更可取。

        4
  •  1
  •   chuckdbacon    15 年前

    有点晚了,但作为参考,D.eval库会满足您的要求:

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

        5
  •  0
  •   David Schoonover    17 年前

    还有一个看似已被放弃的项目——塔玛林港(port Tamarin)的闪光计划:

    http://eval.hurlant.com/

    如果能取得更大的进步,那将是一件了不起的事情,但现在看来这似乎是一种好奇。

    推荐文章