Эта ошибка связана с наличием в теле конструктора лямбда-выражения. Исправим
в классовых процедурах и функциях не получается указывать nil как значение по умолчанию
type
b = record
end;
a = class
class procedure aa(i: integer; nb: ^b := nil);
begin
end;
end;
begin
a.aa(0);
end.
Да, увидели
я рад что в последней версии добавили кнопку для сворачивания регионов, но она не сворачивать подпрограммы и классы и вроде там ничего не меняли, всего пару строчек добавили, но такой вот бред стал ужасно мешать
это я то что удалось запечатлел, но там такое происходит… куски кода вообще рандомно разбросаны повсюду, когда тыкаешь на определённый строчки они меняются на другие и назад, в общем когда много кода, много свёрнутых частей - при Ctrl+X и Ctrl+V, и просто при написании кода, когда паскалю нормально не получается проверить где сворачиваемый код - он начинает сходить с ума… единственное лекарство что я нашёл - ставить и убирать пробелы и после каждого поставленого / убраного пробела сохранять(Ctrl+S по крайней мере, сохранение кнопкой не тестил), через 20-50 таких действий обычно всё приходит в порядок… на следующие полторы минуты… если бы “свернуть все регионы” сворачивало всё - можно было бы хотя бы отформатировать и свернуть всё, правда при сворачивании регионов ещё сбивается то на какую строчку смотришь… в любом случаи это фиговое решение проблемы, но пока вы разбираетесь если добавить хотя бы чтоб сворачивалось всё и сохранялась позиция камеры - можно будет как то работатьbegin
writeln(((1,2,3),(4,5)));
end.
[details=стек ошибки компилятора]Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :‘System.Exception: System.Exception: У корневого элемента нельзя получить Parent в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ReplaceUsingParent(syntax_tree_node from, syntax_tree_node to) в SyntaxVisitors.SugarVisitors.TupleVisitor.visit(tuple_node tup) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTree.BaseChangeVisitor.DefaultVisit(syntax_tree_node n) в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node) в PascalABCCompiler.SyntaxTreeConverters.StandardSyntaxTreeConverter.Convert(syntax_tree_node root) в PascalABCCompiler.SyntaxTreeConverters.SyntaxTreeConvertersController.Convert(syntax_tree_node root) в PascalABCCompiler.Compiler.CompileUnit(unit_node_list Units, unit_or_namespace SyntaxUsesUnit) в PascalABCCompiler.Compiler.Compile()’[/details]
Исправили
begin
var a: array[1..2] of integer;
var b: array[1..2] of integer;
a := b;
end.
Program1.pas(4) : Нельзя преобразовать тип array [1…2] of integer к array [1…2] of integer
я читал на этом форуме что статичные массивы убого медленные, но решил протестить на сколько же(~в 2.2 раза медленнее чтение и запись чем у динамических), ну и сравнивал с кортежами, в общем не приятно так как то
begin
var a,b: array[1..2] of integer;
a := b;
end.
ну а так разумеется работает
Это не ошибка. У статических массивов не структурная, а именная эквивалентность. Поэтому a и b - разных типов
Они практически одинаковые по скорости. Если у Вас как-то не так, то опубликуйте тесты.
Это точно. Одна из причин, из-за которой я крайне сильно не любил ТурбоПаскаль и иже с ним. Простейшая программа с процедурами, использующими массивы, превращалась в ужас наподобие Fortran II. Знакомство с возможностями PascalABC.NET 3.2 в части работы с динамическими массивами сделало меня горячим сторонником этой версии паскаля и теперь я считаю, что статические массивы служат лишь для обеспечения совместимости с программами, написанными на “додревних” версиях.
В конце-концов, если человек считает себя разумным, он должен уметь публично признать свои заблуждения и вовремя от них отказаться.
Мы практически не используем статические массивы в обучении.
ну да, обычно они бесплезные, но для дебага часто удобнее использовать как раз то что медленнее пашет
имеем:
function operator+=<T>(a, b: array of T): array of T; extensionmethod := a + b;
begin
end.
после 3 форматирований получаем:
function operator+=<T>(a, b: array of T): array of T; extensionmethod; extensionmethod; extensionmethod; extensionmethod; extensionmethod; extensionmethod; extensionmethod;extensionmethod := a + b;
begin
end.
ничего не смущает? а вот меня смущает, каждый раз теперь после форматирования чинить… кстати добавьте эту функцию стандартный модуль, + там есть, но писать
Result := Result + a
как то криворуко…
А что она делает?
реализует оператор += для динамических массивов, в стандартном модуле есть оператор + для массивов, вот я думаю почему бы не добавить +=… кстати я ошибку допустил
procedure operator+=<T>(var a: array of T; b: array of T); extensionmethod;
begin
a := a+b;
end;
вот так правильно
на githube нет
Ну, это другое дело. Мы не стали это делать, как и операцию a += 5, по той простой причине, что динамический массив - не расширяемый в процессе выполнения. Ну то есть расширять его можно, но накладные расходы велики. Для этой цели надо использовать List < T > - там эти операции есть
я для больших объёмов массивы не юзаю, а вот если говорить про заполнение при инициализации - выходит кривовато:
class a := new List(new integer[2](0,1))
в общем лишним не будет, кстати эти ваши листы есть на f1 только на 1 страницы, спрятаны среди дофига других похожих типов, надо в таком случаи хотя бы нормальную страницу чтоб описывала что значит и с несколькими то примерами
Страницу надо - это да. Будем переделывать справку.
А то, что Вы пишете, надо писать так:
var l := Lst(0,1)