Ошибки PascalABC.NET

Первая ваша issue про авто класс и анализатор кода, то что я только что залил, а со второй я уже опередил. Немного не так показано но вроде это то же самое.

Вот остальные 2:

В идеале так и должно быть: стандартный вывод через метод расширения для любого стандартного типа. Но тип char – очень логичная кандидатура для реализации из оставшихся нечисловых:

  • он простой и реализация метода для него тривиальна;
  • он часто используется в выражениях с элементами типа string, для которых такая функциональность уже есть;
  • он может неявно автовыводиться при работе с символьными константами, когда разницы по смыслу между string’ом и char’ом нет никакой (только разное кол-во символов в константе).

Нет, string - это последовательность, а char - элементарный тип. В этом их существенная разница.

У нас была мысль сделать Print для всего и мы пока от неё не отказались. Но - боимся

Операция вывода все равно медленная, может быть, элементарный тип перед выводом превращать в последовательность из одного элемента и уже затем отдавать в Print? Скажем, в качестве временной меры…

Когда появится возможность создания пространств имён? Было бы интересно посмотреть на реализацию dll-ок с несколькими пространствами имён на Паскале.

Ошибка: Program142.pas(7) : proc не объявлен в типе b

type
  b = class;
  a = class 
    function proc(): b;
    begin
      //new 
      writeln(result.proc); 
    end; 
  end;
  b = class 
  public 
    function proc(): a;
    begin
    end; 
  end;

begin
end.

Это ошибка программиста. В Delphi и C++ тоже так: если класс предварительно описан, то можно пользоваться только его именем - ничем более.

Опять-таки, это разрешается объявлением заголовка метода с последующим определением его когда тип b будет полностью описан

1 лайк

Очень часто бывает, что “Ошибка времени выполнения: Индекс находился вне границ массива.” указывает на операторные скобки (begin). С чем это может быть связано? 7ml2xoxIo_8

Смотрите на следующую или предыдущую строчку, вроде все .Net языки имеют свойство время от времени промахиваться со строчкой ошибки.

Itellisence не понимает список, полученный из строки. 2018-02-20_100947

12 сообщений перенесены в новую тему: Ошибки, происходящие от незнания различия между Read и Readln

Нельзя раширять операции +,+=,-,-= для делегатов

Зачем это ограничение?

По той же причине, почему нельзя расширить эти операции для integer

В смысле? Для integer их можно расширять.

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

Хотел спросить. Почему не работает это:

type
  T1<T> = class
    event E1: procedure;
    
    procedure TryE1();
    begin
      if E1 <> nil then E1();
    end;
  end;

begin
  var Obj := new T1<integer>();
  Obj.E1 += Halt;
  Obj.TryE1();
end.

?

Это так же самая ошибка что и тут?

1 лайк

Да, та же самая. Прошу исправить данный баг как можно скорее поскольку сильно мешает нормальному написанию кода. Заранее благодарен.

Почему ругается на строку 18: Program142.pas(18) : Нельзя преобразовать тип MyType к object?

type
  TEventArgs = class
  // Содержимое
  end;

type
  TEventArgsHandler = procedure(sender: object; e: TEventArgs);

type
  MyType<T> = class(System.IEquatable<MyType<T>>, System.ICLoneable)
  public 
    Value: T;
    
    event Event1: TEventArgsHandler;
    
    procedure TryEvent1();
    begin
      if Event1 <> nil then Event1(self, new TEventArgs());
    end;
    
    function Equals(obj: MyType<T>) := true;
    
    function Clone(): object := self; // Заглушка
  end;

procedure H(sender: object; e: TEventArgs) := WriteLn('Hello world!');

begin
  var O1 := new MyType<integer>();
  O1.Event1 += H;
  O1.TryEvent1();
end.

Но если уберу скобки и имена интерфейсов - все нормально.