我正在玩ActionScript。我想要的是我可以从字符串中显示数学函数。
E.g。在我的工作python脚本中,我做了类似的事情:
formula = 'x**2 + 3*x'
for x in range( 0, 100 ):
y = eval( formula )
graph.display( x, y )
我想将它移植到ActionScript,但似乎从版本3开始没有更多的eval。我怎样才能计算我的函数值?
答案 0 :(得分:3)
在你的情况下也可能有用的东西,而是使用Javascript eval。你可以使用类似的东西:
var result = ExternalInterface.call(myEvalFunctionInJS,formula)
评估数学函数。
这是一个有点简单有用的解决方法,因为javascript非常接近于actionscript。
如果将ExternalInterface调用放在循环中,它可能会变得迟缓。为避免这种情况,您可以在javascript中编写循环。 (您甚至可以在as3中编写整个javascript,这样您就不需要触摸实际的html页面了。)
编辑: 这是一个链接。
答案 1 :(得分:2)
你必须自己写一个eval
。您必须解析字符串并调用正确的运算符。
Here是一个帮助您入门的链接。
Tamarin项目有一个用ES4编写的ECMAScript parser。试试这个。
“您甚至可以在as3中编写整个javascript,这样您就不需要触摸实际的html页面了。”你有链接/教程吗? - okoman
AS和JS都基于相同的ECMAScript标准。因此,如果您将一个AS3字符串传递给容器,并在此字符串上使用JS的eval
,它应该可以正常工作。
答案 2 :(得分:2)
刚刚注意到这个问题并意识到我几乎完全回答了这个问题:https://stackoverflow.com/a/11460839/1449525
为了解释自己,假设您正在网页中运行,您肯定可以使用D.eval,AS3Eval或ExternalInterface(如当前所选答案中所示)。但是,看起来你真正需要的就是这样简单的MathParser(More 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, []);
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的功能很好,但我对跨语言交流(特别是在效率和安全性方面)以及它的尴尬本质有个人保留意见。在大多数情况下,我觉得通常更喜欢完全包含的,同一语言的解决方案。
答案 3 :(得分:1)
有点晚了,但作为参考,D.eval库可以满足您的要求:
http://www.riaone.com/products/deval/
它是免费的,对我来说很棒,但不附带来源。我发现这个问题正在寻找替代的内置或源可用解决方案。
答案 4 :(得分:0)