В новой версии что-то LinkedListNode сломались. То, что работало раньше, сейчас работает по-другому
function CreateSList<T>(params elems: array of T): LinkedListNode<T>;
begin
if (elems = nil) or (elems.Length = 0) then
begin
Result := nil;
exit;
end;
var l := new LinkedList<T>(elems);
Result := l.First; //Нельзя преобразовать тип T к LinkedListNode<T>
end;
Теперь l.First почему-то возвращает не ссылку на элемент, а значение первого элемента.
var l := LLst(1,2,3);
print(l.First); //1
И еще среда очень часто вылетает после нажатия хоткеев. После Ctrl+Z или Ctrl+S спокойно может возникнуть необрабатываемое исключение в приложении
Замечено, что описанная выше ошибка при выполнении оператора read возникает, если программа запущена по F9 из открытого проекта. Если просто загрузить исходник той же программы и выполнить, то ошибка не возникает. Ошибка также не возникает, если запустить программу из проекта без связи с оболочкой (Shift-F9). Версия 3.2 сборка 1439 (09.05.2017).
type//ваш форум не воспринимает это как строчку программы так что поставил отдельно, это тоже стоит исправить
c1 = class
constructor create;
begin
var a := new real[2](3.1, 3.7);
writeln(a.Select(b -> Round(b)));
end;
end;
begin
end.
image.png1364x46 4.16 KB
если Select не в конструкторе - работает нормально, если убрать строчку с Select - тоже
так же если занести часть с Select в отдельную подпрограмму - тоже работает
P.S.
function Select<\T1,T2>(a:array of T1;selector:T1->T2):System.Collections.Generic.IEnumerable<\T2>;
begin
Result := a.Select(selector);
end;
type
c1 = class
constructor create;
begin
var a := new real[2](3.1, 3.7);
writeln(Select(a,b->Round(b)));
end;
end;
begin
end.
а так снова не пашет
на \ не обращайте внимания, <> без него воспринимает как строчку html и вообще не пишет
У нас на форуме есть замечательная штука из markdown - выделение при помощи символа “`” строки кода или при помощи “```” многострочного кода. Подробнее можно прочесть, например, здесь или погуглить “выделение кода markdown”. Позволяет не танцевать с экранированием символов.
type
c1 = class
constructor create;
begin
var a := new real[2](3.1, 3.7);
writeln(a.Select(b -> Round(b)));
end;
end;
begin
end.
function Select<T1, T2>(a: array of T1; selector: T1->T2): System.Collections.Generic.IEnumerable<T2>;
begin
Result := a.Select(selector);
end;
type
c1 = class
constructor create;
begin
var a := new real[2](3.1, 3.7);
writeln(Select(a, b -> Round(b)));
end;
end;
begin
end.