Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: 0b0rm0t от 25 Апреля 2004, 22:11:23

Название: Пользовательская функция
Отправлено: 0b0rm0t от 25 Апреля 2004, 22:11:23
Суть вот в чем: я имею строку, содержащую мат.функцию (например, "3*х+2"). Из нее я делаю функцию f(x) (через new Function).
А теперь вопрос: можно ли как-нибудь узнать, является ли только что созданная функция корректной (нет ошибок синтаксиса типа "3*/х+1")?
Нужно это, чтобы сообщить пользователю, что мол там ошибка, исправляй (знать где она - необязательно).
Проблема то в том, что функция создается всегда, из любой строки, а попытка вычислить значение "неправильной" функции вызывает Эксплореровскую ошибку, что пользователя, конечно, напугает.
Самому строчку разбирать неохота - не столько сложно, сколько излишне - задача того не стоит.
Название: Пользовательская функция
Отправлено: Werwolf13 от 26 Апреля 2004, 12:43:57
Название: Пользовательская функция
Отправлено: 0b0rm0t от 30 Апреля 2004, 08:18:55
Это сильно помогает, но не до конца - имена функций, входящих в выражение, оно не проверяет. Так что такой код все равно вызывает ошибку:



Это можно как-нибудь исправить?

И еще: что такое catch(e)? А конкретно - е.
Название: Пользовательская функция
Отправлено: гоша от 30 Апреля 2004, 12:32:42
обработку исключений нужно включать и при создании функции, и при выполнении. А проще -- никакую функцию вообще не создавать


function safeEval(code){
try {
return eval (code);
} catch (e) {
return "Error: " + (e.description || e.message);
}
}

alert (safeEval("2+2"));
alert (safeEval("foo(3"));


e - это объект класса Error, так называемое исключение. Содержит информацию об ошибке (код, сообщение итп).