题
我正在尝试使用 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 页面。)
编辑:这是一个链接。
其他提示
只注意到这个问题,并意识到我在这里找到答案几乎完全一样的事情: 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/
这是免费的,我的伟大工程,但不附带源。我发现这个问题寻找内置或源可用的解决方案的替代方案。