Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Кортежи в расширенных свойствах

08.08.2018, 21:20. Показов 973. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу поделиться достаточно интересным моментом, связанным с расширенными свойствами и кортежами.
Правильное поведенье:
Pascal
1
2
3
4
5
6
7
8
9
uses System;
 
type
  TExample<T> = class
    property Value: Tuple<T, T> read new Tuple&<T, T>(default(T), default(T)); // Компилируется - все правильно.
  end;
 
begin
end.
Pascal
1
2
3
4
5
6
7
8
9
uses System;
 
type
  TExample<T> = class
    property Value: T read new Tuple&<T, T>(default(T), default(T)); // Не компилируется - все правильно.
  end;
 
begin
end.
Pascal
1
2
3
4
5
6
7
8
9
uses System;
 
type
  TExample<T> = class
    property Value: (T, T) read new Tuple&<T, T>(default(T), default(T)); // Компилируется - все правильно.
  end;
 
begin
end.
Pascal
1
2
3
4
5
6
7
8
9
uses System;
 
type
  TExample<T> = class
    property Value: (T, T) read new Tuple&<T, T, T>(default(T), default(T), default(T)); // Не компилируется - все правильно.
  end;
 
begin
end.
Pascal
1
2
3
4
5
6
7
8
9
uses System;
 
type
  TExample<T> = class
    property Value: (T, T) read default(T); // Не компилируется - все правильно.
  end;
 
begin
end.
А теперь случаи когда компилятор падает:
Pascal
1
2
3
4
5
6
7
8
9
uses System;
 
type
  TExample<T> = class
    property Value: T read (default(T), default(T)); // Падает, а должно выдавать ошибку.
  end;
 
begin
end.
Pascal
1
2
3
4
5
6
7
8
9
uses System;
 
type
  TExample<T> = class
    property Value: (T, T) read (default(T), default(T), default(T)); // Падает, а должно выдавать ошибку.
  end;
 
begin
end.
Добавлено через 2 минуты
В общем - если использовать синтаксис кортежей (x, y, ...), то вероятность падения компилятора больше, чем если явно пользоваться System.Tuple<T, T1, ...> и System.ValueTuple<T, T1, ...>.

Добавлено через 8 минут
Тестировалось в версии 3.4, сборка 1728.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.08.2018, 21:20
Ответы с готовыми решениями:

Отображение расширенных данных AutoCAD 2006
Здравствуйте! помогите пожалуйста решить следующую задачу: разработка программного модуля VBA позволяющего производить отображение...

Преобразовать формы к виду расширенных форм Бэкуса-Наура.
Формы Бэкуса-Наура (БНФ) Метаязык, предложенный Бэкусом и Науром, использует следующие обозначения: - символ «::=» отделяет левую...

Создание расширенных методов для любой коллекции, делегаты
Нужна скорая помощь!) У меня вот такой класс: using System; using System.Text; namespace ConsoleApplication1 { public...

8
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33187 / 21484 / 8232
Регистрация: 22.10.2011
Сообщений: 36,862
Записей в блоге: 12
08.08.2018, 21:30
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Тестировалось в версии 3.4, сборка 1728.
Так вот у меня сегодняшне-установленная сборка 1728 под Win7 x64 со всеми возможными апдейтами, не откомпилировала ни один из приведенных кодов. Везде был вылет компилятора.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
08.08.2018, 21:35  [ТС]
У меня компилятор на этот:
Pascal
1
2
3
4
5
6
7
8
9
uses System;
 
type
  TExample<T> = class
    property Value: T read (default(T), default(T)); // Падает, а должно выдавать ошибку.
  end;
 
begin
end.
код выдавал:
Internal compiler error in module [pabcnetc.exe] :'System.Exception: System.Exception: У элемента Result := ?System.Tuple.Create(PascalABCCompiler.S yntaxTree.default_operator,PascalABCComp iler.SyntaxTree.default_operator) не найден PascalABCCompiler.SyntaxTree.tuple_node среди дочерних

в PascalABCCompiler.SyntaxTree.syntax_tree _node.FindIndex(syntax_tree_node node, Desc d)
в PascalABCCompiler.SyntaxTree.syntax_tree _node.ReplaceDescendant[T,T1](T from, T1 to, Desc d)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ReplaceUsingParent(syntax_tree_no de from, syntax_tree_node to)
в SyntaxVisitors.SugarVisitors.TupleVisito r.visit(tuple_node tup)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTree.BaseChangeV isitor.DefaultVisit(syntax_tree_node n)
в PascalABCCompiler.SyntaxTree.WalkingVisi torNew.ProcessNode(syntax_tree_node Node)
в PascalABCCompiler.SyntaxTreeConverters.S tandardSyntaxTreeConverter.Convert(synta x_tree_node root)
в PascalABCCompiler.SyntaxTreeConverters.S yntaxTreeConvertersController.Convert(sy ntax_tree_node root)
в PascalABCCompiler.Compiler.CompileUnit(u nit_node_list Units, unit_or_namespace SyntaxUsesUnit)
в PascalABCCompiler.Compiler.Compile()'
Странно - после вылета ошибки и закрытия с ней окна не могу откомпилировать ни одну программу - как будто перестала работать кнопка компилировать. Кнопка запустить тоже отказала сразу же - нажимаешь на нее и вся IDE зависает.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
08.08.2018, 21:41  [ТС]
После запуска вообще другой (и корректной) программы:
Миниатюры
Кортежи в расширенных свойствах  
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
09.08.2018, 15:58
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
uses System;
type
* TExample<T> = class
* * property Value: T read (default(T), default(T)); // Падает, а должно выдавать ошибку.
* end;
begin
end.
Program8.pas(5) : Нельзя преобразовать тип Tuple<T,T> к T

Добавлено через 1 минуту
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
uses System;
type
* TExample<T> = class
* * property Value: (T, T) read (default(T), default(T), default(T)); // Падает, а должно выдавать ошибку.
* end;
begin
end.
Program8.pas(5) : Нельзя преобразовать тип Tuple<T,T,T> к Tuple<T,T>
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
09.08.2018, 15:58  [ТС]
Joy, у Вас сборка выше, чем 1728? Так как я смотрел сегодня их GitHub, что-то там исправляли с кортежами.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
09.08.2018, 15:59
на планшете Windows 10 x32 не падает.

Добавлено через 29 секунд
1731
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
09.08.2018, 16:00  [ТС]
Joy, а ну тогда понятно. Пофиксили.
0
Эксперт Pascal/Delphi
2388 / 1300 / 1492
Регистрация: 29.08.2014
Сообщений: 4,665
09.08.2018, 16:00
да вот только сейчас Visual Studio ставил и паскаль на него.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.08.2018, 16:00
Помогаю со студенческими работами здесь

Получение расширенных настроек в Bios insydeH20 setup utility rev 5.0
Пока нет ответа на этот злободневный вопрос - как открыть расширенные настройки в Bios insydeH20 setup utility rev 5.0. Видел одну легенду....

Один заглавный класс и общение через него двух расширенных классов
Здравствуйте! Не знаю как точнее описать проблему, но суть такова... Я пытаюсь реализовать модульную архитектуру приложения. Подключение...

Кортежи
Задание 1: создайте кортеж, в котором храниться информация о результатах квалификационных выступлений фигуристов. На соревнования...

Кортежи
Читаю Лутца &quot;Изучаем Python&quot;. Он пишет, что кортежи относятся к категории неизменяемых типов данных, как и строки. С другой стороны в его...

Кортежи
Задание: Из данного списка спортсменов распечатать сведения о тех из них, кто занимается плаванием. Указать возраст, сколько лет они...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru