Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Лямбда-выражение в JavaScript

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Интернет
Предыдущая тема :: Следующая тема  
Автор Сообщение
epros
Гость





СообщениеДобавлено: Вт Апр 22 2003 15:45    Заголовок сообщения: Лямбда-выражение в JavaScript Ответить с цитатой

В нескольких справочниках написано, что в качестве второго параметра вызова метода replace вместо строки, подставляемой на место замещаемого фрагмента, можно использовать спецификацию функции. В этом случае при обнаружении замещаемого фрагмента будет вызываться данная функция и возвращаемое ей значение будет подставляться на место фрагмента. Такой синтаксис называется "лямбда-выражением".

Все прекрасно, но как передать этой функции результаты поиска фрагмента? То, что написано в справочниках, у меня почему-то ни фига не работает. В одном из справочников есть даже конкретный пример. Что-то типа этого:

result = source.replace(regular_expression, function (first_parameter) {return first_parameter.length;})

Утверждается, что в качестве певого параметра этой безымянной функции, спецификация которой вставлена прямо в выражение, будет передан найденный фрагмент строки source (следующие параметры используются для передачи других результатов поиска, таких как подфрагменты, выделенные в регулярном выражении круглыми скобками). Т.е. в результате мы должны получить строку, в которой искомые фрагменты заменены на числа, соответствующие их длинам.

У меня же вместо найденного фрагмента вставляется спецификация функции, прямо как она записана:
"function (first_parameter) {return first_parameter.length;}"

Такой же эффект наблюдается при попытке вставки в качестве второго параметра replace имени определенной в другом месте функции без замыкающей его пары круглых скобок:

function FunctionName(...) {
...
}

result = source.replace(regular_expression, functionName)

- в результат вставляется спецификация функции.

Ладно, этого можно было ожидать. Допустим, в справочнике написана ерунда. Попробуем вставить в качестве второго параметра replace не просто ссылку на функцию, а ее вызов:

result = source.replace(regular_expression, functionName())

Вроде бы это приводит к нужному результату: вместо найденных фрагментов вставляется значение, возвращаемое функцией. Но как передать этой функции результаты поиска, хотя бы - сам найденный фрагмент?

Я, кажется, уже все перепробовал: параметры функции, которые не были явно заданы при ее вызове, все оказываются undefined. Я даже пытался передавать в качестве параметра статический объект RegExp. Он передается, но все его свойства, в которых должны быть результаты последнего поиска, оказываются пустыми.

Может кто подскажет, как ПРАВИЛЬНО работать с лямбда-выражениями? Мои результаты получены на IE5.0
Вернуться к началу
Chipollino
Гость





СообщениеДобавлено: Вт Апр 22 2003 16:17    Заголовок сообщения: Информация к размышлению Ответить с цитатой

Выдержка из MSDN: "In JScript 5.5 or later, the replaceText argument can also be a function that returns the replacement text."

а JScriipt 5.5 на IE 5.5...
Вернуться к началу
epros
Гость





СообщениеДобавлено: Ср Апр 23 2003 11:37    Заголовок сообщения: Ага, это наверное означает... Ответить с цитатой

... намек на то, что IE5.0 не поддерживает лямбда выражения внутри метода replace. Может оно и так, но в справочнике, который у меня сейчас под рукой, в статье про replace просто написано, что оно работает начиная с NN4 и IE3, а про лямбда-выражения нет никакого отдельного примечания - просто сказано, что его можно использовать.
Вернуться к началу
Chipollino
Гость





СообщениеДобавлено: Ср Апр 23 2003 12:08    Заголовок сообщения: Re: Ага, это наверное означает... Ответить с цитатой

Всё правильно - метод String.replace(rgExp, replaceText) присутствует уже в 1-ом JavaScript, который как раз поддерживают браузера, начиная с NN4 и IE3... Но фича, что параметр replaceText может быть функцией, наблюдается тока с JS 5.5...

Очень рекомендую MSDN Library - там вся версионность в документации отслеживается...
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Интернет Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...