Skip to content

Commit

Permalink
1. Исправлена ошибка построения лямбды если в тексте выражения встреч…
Browse files Browse the repository at this point in the history
…ается "}"

2. Добавлено строковое представление для объекта лямбда выражения, само лямбда выражение
3. Подняты зависимости
  • Loading branch information
sfaqer committed Jan 10, 2025
1 parent 75e0082 commit e223f52
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 5 deletions.
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

0 comments on commit e223f52

Please sign in to comment.