Skip to content

Commit 3607870

Browse files
authored
Merge pull request #3 from sfaqer/bugfix/braceInExpression
Исправление ошибки с фигурной скобкой и представление объекта лямбда выражения
2 parents 75e0082 + e223f52 commit 3607870

File tree

4 files changed

+57
-5
lines changed

4 files changed

+57
-5
lines changed

packagedef

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Описание.Имя("lambdas")
2-
.Версия("0.2.3")
2+
.Версия("0.3.0")
33
.Автор("Кирилл Черненко")
44
.АдресАвтора("https://github.com/sfaqer")
55
.Описание("API для реализации функциональных интерфейсов для OneScript")
@@ -9,7 +9,7 @@
99
.ВключитьФайл("LICENSE.md")
1010
.ВключитьФайл("package-loader.os")
1111
.ЗависитОт("reflector", "0.7.1")
12-
.ЗависитОт("decorator", "1.7.1")
12+
.ЗависитОт("decorator", "2.0.0")
1313
.РазработкаЗависитОт("1testrunner")
1414
.РазработкаЗависитОт("coverage")
1515
.РазработкаЗависитОт("asserts")

src/internal/Модули/ЛямбдыКешируемыеЗначения.os

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
Если ЭтоЛямбдаВыражение = Неопределено Тогда
77

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

1212
КонецЕсли;

src/Классы/ЛямбдаВыражение.os

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,15 @@
190190

191191
Построитель = Новый ПостроительДекоратора(мОбъект)
192192
.Отладка(Отладка)
193-
.Метод(Метод);
193+
.Поле(Новый Поле("Выражение").ЗначениеПоУмолчанию(мВыражение))
194+
.Метод(Метод)
195+
.Метод(
196+
Новый Метод("ОбработкаПолученияПредставления")
197+
.ЭтоПроцедура()
198+
.Параметр(Новый ПараметрМетода("Представление"))
199+
.Параметр(Новый ПараметрМетода("СтандартнаяОбработка"))
200+
.ТелоМетода("СтандартнаяОбработка = Ложь; Представление = Выражение;")
201+
);
194202

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

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

227-
РазобранноеВыражение.Тело = Совпадения[0].Группы[2].Значение;
235+
Тело = Совпадения[0].Группы[2].Значение;
236+
237+
Если СтрНачинаетсяС(Тело, "{") Тогда
238+
Тело = Прав(Тело, СтрДлина(Тело) - 1);
239+
КонецЕсли;
240+
241+
Если СтрЗаканчиваетсяНа(Тело, "}") Тогда
242+
Тело = Лев(Тело, СтрДлина(Тело) - 1);
243+
КонецЕсли;
244+
245+
РазобранноеВыражение.Тело = Тело;
228246

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

tests/ЛямбдаВыражение.os

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,40 @@
537537

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

540+
&Тест
541+
Процедура ФигурнаяСкобкаВнутриВыраженияНеЛомаетЛямбду() Экспорт
542+
543+
// Дано
544+
545+
ЛямбдаВыражение = Новый ЛямбдаВыражение("х -> Возврат ""{"" + х + ""}"" }");
546+
547+
// Когда
548+
549+
Результат = ЛямбдаВыражение.ВОбъект().Применить("1");
550+
551+
// Тогда
552+
553+
Ожидаем.Что(Результат).Равно("{1}");
554+
555+
КонецПроцедуры
556+
557+
&Тест
558+
Процедура ПредставлениеПереопределяется() Экспорт
559+
560+
// Дано
561+
562+
ЛямбдаВыражение = Новый ЛямбдаВыражение("х -> х = х + 1");
563+
564+
// Когда
565+
566+
Результат = Строка(ЛямбдаВыражение.ВОбъект());
567+
568+
// Тогда
569+
570+
Ожидаем.Что(Результат).Равно("х -> х = х + 1");
571+
572+
КонецПроцедуры
573+
540574
Функция ЗахватываемыйОбъект()
541575

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

0 commit comments

Comments
 (0)