![]() |
Вычислить условное выражение, если оно представленно как строка
Здравствуйте.
Зашел в тупик и долго искал в поисковиках, но пока без результатно. Возможно ли простое/не простое решение следующей задачи: var A = 5; var B = 4; затем из XML приходит строка "A>B", помещенная в пременную var condition = "A>B" Возможно ли как то превратить condition в действительно условное выражение, чтобы типа: if ( [какое-то превращение condition в выражение] ) { trace("true") } else { trace("false") } Спасибо. |
Да только парсить строку. Здесь уже все зависит от сложности выражений, допускаются ли комбинированные (типа (A + B) < C), сложные логические (типа (A > B) && (B <= C) || (A == C)) и вообще любое допущение вариантов формата создаст огромные сложности. Ну а если простое сравнение двух операндов, то несложно. Только нужны свойства уровня экземпляра для хранения сравниваемых значений — локальные переменные функции не подходят.
Код AS3:
|
http://code.google.com/p/flash-embedded-language/
Я писал когда-то очень простенький интерпретатор. Можно тут посмотреть, если нужно что-то более продвинутое, чем парсер на основе регулярной грамматики. Что из вашего вопроса не понятно - так это описание того, чем являются выражения A и B. В зависимости от этого нужно решать проблему. Если известно, что А и В - терминалы, тогда нужно будет только немного переделать код Wolsh'a для того, чтобы он делал ленивые вычисления (т.е. чтобы выражения "А или В" не вычисляли В если А истинно, и "А и Б" не вычисляли Б, если А ложно. Но если А или Б могут быть не терминалами, тогда все становится гораздо сложнее... И еще сложнее, если А и Б могут зависеть от контекста. |
Спасибо огромное. Многое выяснил.
Цитата:
Я нашел решение пока. У каждого пункта меню есть имя. Я создал объект, в котором под этими именами будут функции, а в ней уже и условия на disable, visible и т.д. и там же ссылка на функцию CLICK пункта меню. |
| Часовой пояс GMT +4, время: 20:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.