Думаю, лучше не добавлять = ?, то есть писать просто Item[Int32].
Но при этом для интексаторов некоторых стандартных типов, как IList - сделать отдельное правило, чтоб выводило Item = [*значения*].
Полагаю, что тогда лучше для IList<T>, IReadOnlyList<T>, массивов и строк индексаторы с одним параметром выводить в формате Item[from..to]. Хотя, в этом случае будет дублирование информации со свойством Count/Length.
Опрос опубликован также и здесь, поскольку количество активных участников Cyberforum больше, чем здесь.
Можно сделать ограничение по выводу, как делает PascalABC.NЕТ, ставя после некоторого количества элементов многоточие. Или, действительно, выводить диапазон [a … b].
Не могу представить человека, для которого потребуется использовать многоточие… Это сколько параметров у индексатора надо. Нет, я не против такой задумки, технически сделать несложно.
Как самому собрать последнюю версию NETSquirrel?
- Откройте GitHub.
- Нажмите на
Clone or download>Download ZIP. - После скачивания откройте архив и найдите в нём файл
.sln. - Запустите его и нажмите на
Build>Build Solution. - В зависимости от установленной конфигурации
Debug/Releaseоткройте соответствующую папку:NETSquirrel\bin\Debug/NETSquirrel\bin\Release. - Найдите сгенерированный файл
.dll.
Инструкция предназначена для новичков.
Обычно этот раздел суют в README.md на гитхабе.
В данном случае я оформил этот tutorial сообщением, поскольку он нацелен на совсем новичков (в плане работы с GitHub). Но, всё-таки, вариант с ReadMe.md мне нравится.
Заготовка к спецификации NETSquirrel.
Пост посвящён PABCSystem, но поскольку, внизу проводится некое сравнение, будет логично поместить его сюда. Также дана ссылка на краткий FAQ по использованию PABCSystem в C#. Видел, что студенты данного форума беседовали с @Admin на эту тему. Это послужило поводом опубликовать данную “заметку”.
type
T1 = class
public
a := 1;
b := 4.1;
end;
T2 = class
public
c := new T1();
end;
Ожидаемый вывод AutoPrint для экземпляра класса T2 с разделителем запятой: c = T1: [a = 1, b = 4.1]
Возможная проблема:
type
T1 = class
public
a := ArrayOf(1, 2, 3);
b := 4.1;
end;
T2 = class
public
c := new T1();
end;
Ожидаемый вывод AutoPrint для экземпляра класса T2 с разделителем запятой: c = T1: [a = 1, 2, 3, b = 4.1]. Пока в массиве цифры - всё не так плохо, но если там стояли бы строки… Можно сделать так, чтобы разделитель указывался лишь для полей и свойств, но не для их содержимого, точнее, чтобы при указании ; разделителем получалось: c = T1: [a = 1, 2, 3; b = 4.1].
Кто предлагает и какие варианты решения данной проблемы?
А почему у массивов нет никаких скобочек?
И - я бы делал как в JSON, объекты в {}, массивы в [].
Скобки - будут. Только, в StructuredPrint - аналоге AutoPrint, с тем отличием, что он будет выводить значения полей и свойств “развёрнутом” виде.
Опубликована NETSquirrel 0.0.17.2 [Night build].
Изменения:
- Улучшен AutoPrint.
- AutoPrint переименован в DebugPrint (обратная совместимость сохранена).
- Методы GenerateArray и GenerateMatrix, занимающиеся генерацией массивов и матриц с возможностью ссылки на остальные элементы создаваемого массива или матрицы.
Генерация массива, который заполнен числами Фибоначчи:
{$reference NETSquirrel.dll}
uses NETSquirrel.Utils;
begin
ArraysUtils.GenerateArray&<integer>(10, (a, i) -> begin
case i of
0, 1: Result := 1;
else Result := a[i - 1] + a[i - 2];
end;
end).PrintLine();
end.
Аналогично - для матриц:
{$reference NETSquirrel.dll}
uses NETSquirrel.Utils;
begin
MatricesUtils.GenerateMatrix&<integer>(10, 10, (a, i, j) -> begin
case j of
0, 1: Result := 1;
else Result := a[i, j - 1] + a[i, j - 2];
end;
end).PrintAsMatrix();
end.
Просьба @RAlex, @Kotov, @Admin, @ibond проверить работают ли программы-примеры в 7-ой версии NETSquirrelExtensions. Результаты моей проверки показали, что:
- На
MacBookсWindows 10(русскоязычной) всё работает нормально. - На более древнем ноутбуке с
Windows 10(англоязычной) сNET 4.7.2примеры не отрабатывают, как ожидалось, а выдают ошибку. Причём, стоит заметить, что все модули и тестовые программы компилируются успешно.
Runtime exception: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку "NETSquirrel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. The system cannot find the file specified.
Stack trace:
в Tuples-Example.Program.$Main()
в Tuples-Example.Program.Main()
Все примеры работают. Windows 7 Ultimate, .NET 4.7.2
Проблема решена. Причина была в том, что рядом с Generate output files to directory стоял флажок, установленный по умолчанию, который я забыл убрать:
Добавил замечание по этому поводу в главный пост, чтобы пользователи не повторяли такую ошибку.
@Admin .dll файлы надо копировать не в папку с основной программой, а в выходную папку когда поставлен этот флажок. Студия так делает, по крайней мере.
Текущий рейтинг (оценка 4.91, голосовавших 165, просмотров 30,114):
К проекту присоединился новый тестировщик. Желающих помочь проекту могу включить в одну или несколько из данных команд (за исключением Maintainers). Главное, чтобы новые участники проекта могли:
- Работать с
Rider/Visual Studio. - Работать с
GitиGitHub. - Желали помочь проекту.
Обращаться по данным вопросам Вы можете ко мне через официальную группу поддержки, либо по другим удобным Вам каналам связи.
При использовании ArrayOf из GeneralExtensions:
{$reference NETSquirrel.dll}
uses NETSquirrel.Utils;
uses GeneralExtensions;
begin
ArrayOf&<object>(nil).PrintLine();
end.
программа работает как и ожидалось - ничего не выводит. Сказано ожидалось, поскольку данная Issue ещё не исправлена, после чего при встрече null (nil) будет выводиться null.
Однако, с Arr из PABCSystem происходит падение:
{$reference NETSquirrel.dll}
uses NETSquirrel.Utils;
uses GeneralExtensions;
begin
Arr&<object>(nil).PrintLine();
end.
, но только если nil - первый элемент массива.
Ошибка времени выполнения: System.ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: source
Стек:
в System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
в PABCSystem.PABCSystem.Arr[T](IEnumerable`1 a) в C:\Program Files (x86)\PascalABC.NET\LibSource\PABCSystem.pas:строка 4187
в Program.Program.$Main() в C:\PABCWork.NET\NETSquirrelExtensions\Program.pas:строка 6
в Program.Program.Main()



Институт математики, механики и компьютерных наук ЮФУ, 2005–2021