Первая ваша 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 будет полностью описан
Очень часто бывает, что “Ошибка времени выполнения: Индекс находился вне границ массива.” указывает на операторные скобки (begin). С чем это может быть связано?
Смотрите на следующую или предыдущую строчку, вроде все .Net языки имеют свойство время от времени промахиваться со строчкой ошибки.
Itellisence не понимает список, полученный из строки.
Нельзя раширять операции +,+=,-,-= для делегатов
Зачем это ограничение?
По той же причине, почему нельзя расширить эти операции для 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.
?
Да, та же самая. Прошу исправить данный баг как можно скорее поскольку сильно мешает нормальному написанию кода. Заранее благодарен.
Почему ругается на строку 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.
Но если уберу скобки и имена интерфейсов - все нормально.