Автор Тема: Пользовательская функция  (Прочитано 3050 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 0b0rm0t

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 99
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Пользовательская функция
« : 25 Апреля 2004, 22:11:23 »
Суть вот в чем: я имею строку, содержащую мат.функцию (например, "3*х+2"). Из нее я делаю функцию f(x) (через new Function).
А теперь вопрос: можно ли как-нибудь узнать, является ли только что созданная функция корректной (нет ошибок синтаксиса типа "3*/х+1")?
Нужно это, чтобы сообщить пользователю, что мол там ошибка, исправляй (знать где она - необязательно).
Проблема то в том, что функция создается всегда, из любой строки, а попытка вычислить значение "неправильной" функции вызывает Эксплореровскую ошибку, что пользователя, конечно, напугает.
Самому строчку разбирать неохота - не столько сложно, сколько излишне - задача того не стоит.
Если голова болит, значит она есть.

Оффлайн Werwolf13

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 76
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Пользовательская функция
« Ответ #1 : 26 Апреля 2004, 12:43:57 »

Оффлайн 0b0rm0t

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 99
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Пользовательская функция
« Ответ #2 : 30 Апреля 2004, 08:18:55 »
Это сильно помогает, но не до конца - имена функций, входящих в выражение, оно не проверяет. Так что такой код все равно вызывает ошибку:



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

И еще: что такое catch(e)? А конкретно - е.
Если голова болит, значит она есть.

Оффлайн гоша

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 85
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Пользовательская функция
« Ответ #3 : 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, так называемое исключение. Содержит информацию об ошибке (код, сообщение итп).

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28