![]() |
Динамическое создание Function...
Возможно ли динамически создать function?
смысл. например есть Y=X*X, создаю класс в котором должна эта матиматическая функция обрабатываться, т.е. подставляем X выдает cоответствующий Y. в принципе сие есть function fun(x:Number):Number{return x*x} но это надо задавать вне класса и такая форма не удобна. есть ли способ просто как-то передать Х*Х в обработчик класса который преобразует как-то переданное в полноценную функцию. может кто знает? |
а почему не удобна?
|
Цитата:
|
ну тогда пусть в классе будет переменная которая содержит ссылку на функцию. тогда можно для каждого экземпляра класса задавать свою функцию.
|
ссылку на какую функцию?
надо сделать так чтобы обращение к классу было вроде этого: myFunc = new Func(x*x) потом переработать полученное и обрабатывать его как обычную функцию. допустим никаких данных кроме строки х*х вне класса нет. как быть? вообще как можно передавать ссылку на function в класс? |
Ты ведь знаешь что подгружать код в swf нельзя. Код должен быть заранее скопилирован. Если ты динамически задаешь формулу, то тебе придется писать парсер для обработки строки с формулой.
и ссылку на фунцкию ты передаешь не в класс, а в его экземпляр (пример: setInterval) |
ок. допустим есть у нас парсер который определяет что "х*х" есть х*х как мне эту строчку передать в класс?
|
да забудь ты про класс. есть только экземпляр класса
и строчка передается так экземпляр = new класс ("формула") |
как мне потом использывать твою "формула" ?
если у меня есть function f(x:Number):Number{ return x*x } то я, чтобы получить ответ обращаюсь так: y = f(5) а если у меня просто y=x*x то как? |
Цитата:
|
чуве, мне твой парсер н... не нужен.
ты суть вопроса то понял?? Function как класс имеет только: Function.call() Function.apply() а мне мужно типа того что для класса MovieClip есть createEmptyMovieClip() |
Цитата:
флэш не поддерживает полностью операторы eval & function так как это описанно в ECMA |
какой вариант? через парсер?? тоесть каждый раз гонять парсер для получения одного ответа? а если нужно обработать миллионы значений?
если я что не доганяю то киньте пример парсера... |
хамы, одни хамы кругом...
1) парсер это функция, принимающая параметром некую строку, после чего она её анализирует и в данном случае превращает её в математическое выражение. 2) глянь тут http://www.senocular.com/flash/source.php что-то было такое. вроде графика в зависимости от заданной ф-ции. |
непонял!!!
Цитата:
ты вообще читал мои посты?? ты предлагаешь для каждого вычисления гонять парсер так чтоли?? |
Другого варианта нет. Либо ты заранее "зашиваешь" формулы во флеш. Либо ты пользуешься парсером для обработки динамических формул.
Хотя есть еще вариант. Пишешь формулы и php генерит тебе флешку с данной функцией и тыее подгружаешь свой основной флеш. Но это уже отдельная песня... |
да, предлагаю гонять.
из того что ты писал не совсем понятно, что же тебе нужно. по поводу 1го поясню: чуве, мне твой парсер н... не нужен. ты суть вопроса то понял?? это хамство. значит ты хам. только все вопросы личного характера в личку. чуве эт просто чувак. тебе это режет слух, мне другое. |
Господа хватит отношения выяснять.
2KidsKilla: мне бы твое обращение тоже слух порезало, лучше как-то привычнее обращаться, гораздо больше шансов на правильное понимание 2Dracula_DIS: а тебе горячиться тоже сразу не стоило, может это опячатка была. сам иногда буквы в словах пропускаю. |
Можно сделать классическим способом - для выражения строить так называемое бинарное дерево, где каждой математической операции (+, -, /, *, etc) соответствует узел дерева, к которому привешиваются операнды, участвующие в этом выражении - количеством от нуля до бесконечности :) Операндом может быть как число, так и ссылка на другую операцию. В итоге, чтобы получить результат, надо пройти по дереву снизу вверх и прорешать все выражения. На самом же верхнем уровне будет вычислен результат. Таким образом, можно отпарсить выражение один раз, и вычислять его потом сколько угодно. Для облегчения решения рекомендую поискать метод "венгерской записи" - не путать с венгерской нотацией - где-нибудь в теории компиляторов.
|
Цитата:
|
один из вариантов, конечно. но он не требует постоянного парсинга для каждого вычисления. дерево потом можно крутить сколько угодно, и менять значения переменных. шум, как я понял, дошёл до того, что на каждое вычисление нужен парсинг.
|
в любом случае ф-цию придётся каждый раз вызывать.
а шум зашел из-за того что не работает eval("x*x"); |
в честь чего каждый-то? при создании нового выражения - да. при вычислении одного и того же несколько раз - не обязательно.
|
Я думаю тебе нужно использовать Обратную польскую запись :)
|
блин, действительно польскую :) склероз :(
|
Подниму трэд. Практически та же байда.
Цитата из хэлпа: "...при ее помощи можно динамически преобразовывать строки в идентификаторы объектов, клипов и функций..." - эт про eval. суть в следующем. надо запускать функцию с параметром(ами), причем имя и параметры должны браться из строки. т.е. что-то типа: Код:
var str:String = "trase ('help')";Спасибо!) |
упс, так сказать...
нашел решение сам. :) Код:
var f:String = "ff"; |
можно так
e = "x * x" f = eval(" function(x) {return " + e + "};") потом типа y = f(x) куда надо просто передаешь "x * x" но по-моему удобнее просто передать функцию |
| Часовой пояс GMT +4, время: 02:58. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.