Вопрос

Я немного поиграл с 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.(Вы даже можете написать весь javascript внутри as3, чтобы вам не нужно было прикасаться к самой html-странице.)

Редактировать:Вот ссылка для этого.

http://www.actionscript.org/resources/articles/745/2/JavaScript-and-VBScript-Injection-in-ActionScript-3/Page2.html

Другие советы

Вам нужно будет написать eval себя.Вам нужно будет разобрать строку и вызвать нужные операторы.

Здесьэто ссылка, которая поможет вам начать.

В проекте Tamarin есть ECMAScript анализатор написано на ES4.Попробуйте и это тоже.

"Вы даже можете написать весь javascript внутри as3, чтобы вам не нужно было касаться фактической html-страницы". У вас есть ссылки / руководства?– окоман

И AS, и JS основаны на одном и том же стандарте ECMAScript.Итак, если вы передаете строку AS3 в контейнер и используете JS eval в этой строке это должно работать просто отлично.

Только что заметил этот вопрос и понял, что ответил здесь почти на то же самое: https://stackoverflow.com/a/11460839/1449525

Перефразируя меня, вы определенно можете использовать D.оценка, Как3евал, или ExternalInterface (как показано в текущем выбранном ответе), предполагая, что вы работаете на веб-странице.Однако все, что, похоже, вам действительно нужно, - это что-то вроде этого простого Математический анализатор (Дополнительная информация о 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/

Это бесплатно и отлично работает для меня, но не поставляется с исходным кодом.Я нашел этот вопрос в поисках альтернативного встроенного или доступного с исходным кодом решения.

Существует также, казалось бы, заброшенный проект по переносу Tamarin на Flash сам по себе:

http://eval.hurlant.com/

Было бы здорово, если бы был достигнут больший прогресс, но пока это выглядит как курьез.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top