Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Описание.Имя("lambdas")
.Версия("0.2.3")
.Версия("0.3.0")
.Автор("Кирилл Черненко")
.АдресАвтора("https://github.com/sfaqer")
.Описание("API для реализации функциональных интерфейсов для OneScript")
Expand All @@ -9,7 +9,7 @@
.ВключитьФайл("LICENSE.md")
.ВключитьФайл("package-loader.os")
.ЗависитОт("reflector", "0.7.1")
.ЗависитОт("decorator", "1.7.1")
.ЗависитОт("decorator", "2.0.0")
.РазработкаЗависитОт("1testrunner")
.РазработкаЗависитОт("coverage")
.РазработкаЗависитОт("asserts")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
Если ЭтоЛямбдаВыражение = Неопределено Тогда

ЭтоЛямбдаВыражение = Новый РегулярноеВыражение(
"(.*)->\s*\{?([^\}]+)\}?"
"(.*)->\s*([\s\S]*)"
);

КонецЕсли;
Expand Down
22 changes: 20 additions & 2 deletions src/Классы/ЛямбдаВыражение.os
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,15 @@

Построитель = Новый ПостроительДекоратора(мОбъект)
.Отладка(Отладка)
.Метод(Метод);
.Поле(Новый Поле("Выражение").ЗначениеПоУмолчанию(мВыражение))
.Метод(Метод)
.Метод(
Новый Метод("ОбработкаПолученияПредставления")
.ЭтоПроцедура()
.Параметр(Новый ПараметрМетода("Представление"))
.Параметр(Новый ПараметрМетода("СтандартнаяОбработка"))
.ТелоМетода("СтандартнаяОбработка = Ложь; Представление = Выражение;")
);

Для каждого ПеременнаяИЗначение Из мКонтекст Цикл

Expand Down Expand Up @@ -224,7 +232,17 @@
РазобранноеВыражение.Параметры = РезультатРазбора.Параметры;
РазобранноеВыражение.Аннотации = РезультатРазбора.Аннотации;

РазобранноеВыражение.Тело = Совпадения[0].Группы[2].Значение;
Тело = Совпадения[0].Группы[2].Значение;

Если СтрНачинаетсяС(Тело, "{") Тогда
Тело = Прав(Тело, СтрДлина(Тело) - 1);
КонецЕсли;

Если СтрЗаканчиваетсяНа(Тело, "}") Тогда
Тело = Лев(Тело, СтрДлина(Тело) - 1);
КонецЕсли;

РазобранноеВыражение.Тело = Тело;

КонецПроцедуры

Expand Down
34 changes: 34 additions & 0 deletions tests/ЛямбдаВыражение.os
Original file line number Diff line number Diff line change
Expand Up @@ -537,6 +537,40 @@

КонецПроцедуры

&Тест
Процедура ФигурнаяСкобкаВнутриВыраженияНеЛомаетЛямбду() Экспорт

// Дано

ЛямбдаВыражение = Новый ЛямбдаВыражение("х -> Возврат ""{"" + х + ""}"" }");

// Когда

Результат = ЛямбдаВыражение.ВОбъект().Применить("1");

// Тогда

Ожидаем.Что(Результат).Равно("{1}");

КонецПроцедуры

&Тест
Процедура ПредставлениеПереопределяется() Экспорт

// Дано

ЛямбдаВыражение = Новый ЛямбдаВыражение("х -> х = х + 1");

// Когда

Результат = Строка(ЛямбдаВыражение.ВОбъект());

// Тогда

Ожидаем.Что(Результат).Равно("х -> х = х + 1");

КонецПроцедуры

Функция ЗахватываемыйОбъект()

Возврат Новый ПостроительДекоратора()
Expand Down
Loading