我正在玩一些 ActionScript。我想要的是我可以从一个字符串中显示一个数学函数。
例如,在我的工作 python 脚本中,我做了这样的事情:
formula = 'x**2 + 3*x'
for x in range( 0, 100 ):
y = eval( formula )
graph.display( x, y )
我想将此移植到 ActionScript,但似乎自版本 3 以来不再有 eval。无论如何我如何计算我的函数值?
我正在玩一些 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/
它是免费的,对我来说很好用,但没有源代码。我发现这个问题正在寻找替代的内置或源可用的解决方案。