Ошибки PascalABC.NET

В новой версии что-то LinkedListNode сломались. То, что работало раньше, сейчас работает по-другому :smiley:

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 спокойно может возникнуть необрабатываемое исключение в приложении :frowning:

Да, мы знаем об этой ошибке:

Ошибка исправлена

Да, исправлена. А я было обрадовался что и моя заработает. Ан нет… На всякий случай напомню код…

type
  TF=(integer,integer);

function f(a:TF):sequence of integer;
begin
  var p,q:integer;
  (p,q):=a;
  yield p;
  yield q;
end;

begin
  f((-3,5)).Println
end.

Текст сообщения об ошибке примерно тот же: Program1.pas(7) : Неизвестное имя ‘a’

Пользуйтесь Issue: https://github.com/pascalabcnet/pascalabcnet/issues/375

Сообщение перенесено в новую тему: Мнимые ошибки PascalABC.NET

Если Вы подписались на этот Issue, то Вы могли увидеть, что он закрыт. Версия на сайте

1 лайк

function f1(a: real): real; begin

end;

begin with f1(0.5) do //бла бла бла //эта строчка будет уезжать вниз при форматировании ; end.

1 лайк

Замечено, что описанная выше ошибка при выполнении оператора read возникает, если программа запущена по F9 из открытого проекта. Если просто загрузить исходник той же программы и выполнить, то ошибка не возникает. Ошибка также не возникает, если запустить программу из проекта без связи с оболочкой (Shift-F9). Версия 3.2 сборка 1439 (09.05.2017).

Какая?

PABCSystem строки 946-947

/// Устанавивает текущий каталог. Возвращает True, если каталог успешно удален
function SetCurrentDir(s: string): boolean;

удалён, да… не верю… кстати в реализации строки 6392 и 6393 строит поменять местами, на 1 операцию будет меньше :slight_smile: (когда неудачно)

Result := True;
Environment.CurrentDirectory := s;

Создан новый консольный проект, в него скопировано содержимое примера Assign1.pas. Далее - F9, при попытке ввода для оператора readln - ошибка.

Спасибо за чёткое описание повторяемой ошибки. Увидели наконец

function a:=(true,true,true).ToString;

ожидалась не точка а точка с запятой если сделать функцией класса то ожидалась не точка а оператор

function a:=((true,true,true)).ToString;

а так у компилятора выскакивает ошибка “ссылка на объект не указывает на экземляр объекта”

знаю, можно сделать по другому и будет пахать но смысл в том чтоб в 1 строчку и в конце концов у компилятора ошибки не должны выскакивать

Всегда к вашим услугам ). Ошибка происходит в Windows 7 и в Windows 10.

Исправлено

вот эта программа выдаёт оч странную ошибку:

type//ваш форум не воспринимает это как строчку программы так что поставил отдельно, это тоже стоит исправить :slight_smile:

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.
1 лайк

или же BB-Code [CODE]writeln(a,b);[/CODE]

Эта ошибка связана с наличием в теле конструктора лямбда-выражения. Исправим