我正在尝试使用 ActionScript。我想要的是我可以显示字符串中的数学函数。

例如。在我的工作 python 脚本中我做了类似的事情:

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

我想将其移植到 ActionScript,但自版本 3 以来似乎不再有 eval。我怎样才能计算我的函数值?

有帮助吗?

解决方案

使用 Javascript eval 也可能适用于您的情况。你可以使用类似的东西:

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

其他提示

您将不得不自己写的eval。你将不得不解析字符串并调用正确的经营者。

这里 “SA的链接,让你开始。

在狨项目具有的ECMAScript 解析器写入ES4。尝试这一点。

  

“你甚至可以编写内AS3的整个JavaScript,因此你不需要接触实际的HTML页面。”你有联系/教程? - okoman

AS和JS都基于相同的ECMAScript标准。所以,如果你通过AS3的字符串到容器中,并使用JS的eval此字符串,它应该工作得很好。

只注意到这个问题,并意识到我在这里找到答案几乎完全一样的事情: https://stackoverflow.com/a/11460839/ 1449525个

要套用自己,你绝对可以使用 D.eval ,的 AS3Eval ,或ExternalInterface的(如被看见在当前选择的答案)假设你在网页中运行。然而,所有这似乎是你真正需要的是这样的简单 MathParser 关于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, []);

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

我敢肯定ExternalInterface的东西的作品不错,但我对跨语言沟通(尤其是在效率和安全方面)的个人预订,以及只是它的尴尬性质。感觉像全包含的,相同的语言溶液通常是在大多数情况下优选的。

有一个有点晚,但参考,D.eval库做什么你所要求的:

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

这是免费的,我的伟大工程,但不附带源。我发现这个问题寻找内置或源可用的解决方案的替代方案。

还有一个看似废弃项目端口思塔玛林到Flash本身:

http://eval.hurlant.com/

将是真棒,如果有更多取得进展,但似乎像一个好奇心了。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top