2

我正在玩一些 ActionScript。我想要的是我可以从一个字符串中显示一个数学函数。

例如,在我的工作 python 脚本中,我做了这样的事情:

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

我想将此移植到 ActionScript,但似乎自版本 3 以来不再有 eval。无论如何我如何计算我的函数值?

4

5 回答 5

3

在您的情况下也可能有效的方法是使用 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

于 2009-03-23T13:55:05.967 回答
2

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

是一个帮助您入门的链接。

Tamarin 项目有一个用 ES4 编写的 ECMAScript解析器。试试这个。

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

AS 和 JS 都基于相同的 ECMAScript 标准。所以,如果你将一个 AS3 字符串传递给一个容器,并eval在这个字符串上使用 JS,它应该可以正常工作。

于 2009-03-22T16:52:11.993 回答
2

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

套用我自己的话,假设您在网页中运行,您绝对可以使用D.evalAS3Eval或 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 的东西工作得很好,但我个人对跨语言通信(特别是在效率和安全性方面)以及它的尴尬性质持保留意见。我觉得在大多数情况下,一个完全包含的、相同语言的解决方案通常更可取。

于 2012-08-27T15:59:32.650 回答
1

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

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

它是免费的,对我来说很好用,但没有源代码。我发现这个问题正在寻找替代的内置或源可用的解决方案。

于 2011-05-30T00:31:43.880 回答
0

还有一个看似废弃的项目将 Tamarin 移植到 Flash 本身:

http://eval.hurlant.com/

如果取得更多进展会很棒,但现在似乎是一种好奇心。

于 2009-04-23T19:24:38.650 回答