Я не работал с классами в FPC и Delphi, но думаю, что в таком именно виде - вряд ли )))
Я про то что статичный ацессор у не_статичного поля.
Это лучше к @Admin. Я экзотику предпочитаю стороной обходить. Или, иначе, просто не пишу подобные вещи, поэтому и не могу тут что-то сказать определенное. Ну вот такая у меня позиция: непонятно - не используй, тем более, что большого выигрыша от именно такой конструкции я не вижу. Должна работать - пусть работает, не должна - ну и бог с ней… )))
Ну, у вас же установлены старые паскали, разве нет?
Нет, конечно, зачем мне хлам?))) FPC можете попробовать сами: выберите Pascal FPC (3.0.0)
Но по-моему там все же иной синтаксис.
Добрый день. Наткнулся под ALT Linux на ошибку, идентичную описанной в исходной ветке обсуждения. Что до mono-full vs mono-complete: в Альте последнего нет, как нет и libmono-system-numerics. Кто-нибудь побеждал подобное? Поделитесь, пожалуйста, рецептом.
begin
var s: Set of Integer;
Include(s, ReadInteger);
end.
Ошибка времени выполнения: System.InvalidProgramException: Среда выполнения Common Language Runtime обнаружила недопустимую программу.
Стек:
в Program4.Program.$Main()
в Program4.Program.Main()
Да, исправим.
Пока пишите
begin
var s: Set of Integer;
Include(s, ReadInteger());
end.
Спасибо
begin
var s := 1.2-[2,3];//Ошибка: Операция 'dunmin' не применима к типам real и set of integer
end.
Что за dunmin
? Так и должно писать?
Напишите в Issue
“Невозможно вывести типы-параметры generic-подпрограммы ReadElements (укажите типы-параметры явно)” Или может быть я неправильно пишу эту функцию?
begin
var f1: file of integer;
Rewrite(f1, 'a.dat');
Write(f1, 1, 2, 3, 4, 5);
f1.Close;
ReadElements('a.dat').Println;//ошибка
end.
Ну, вам правильно пишет, надо указывать параметры шаблона явно:
function f1<T>: T := default(T);
begin
var a := f1<byte>;
end.
Тут уже выдаёт другую ошибку. Проблема в том что компилятор думает что вы сравниваете указатель на функцию f1
и типа byte
оператором <
. А затем сравниваете результат с ничем. Поэтому пишет что ожидалось выражение вместо ;
то есть то с чем можно сравнить.
В этом случае нужно экранировать первый <
, то есть поставить перед ним & (этот знак под семёркой в англ раскладке). Тогда компилятор не сможет считать <
оператором сравнения, и всё скомпилируется правильно.
Да, так работает ReadElements&<integer>('a.dat').Println;
begin
loop 10 do
begin
var i: integer;
writeln(i);
i += 1;
end;
end.
i обнуляется только в первой итерации цикла. @Admin, это ошибка?
В1 лекции повышение квалификации преподавателей об этом что-то есть https://youtu.be/U65-SebSaj4?t=5430
Там переменной присваивается сразу новое значение, поэтому обнуление и не нужно.
А почему должно обнуляться если память выделяется один раз, потом то что туда записалось то и остается. Наверное так.
Это внутренности реализации компилятора. Знание их не должно быть обязательным для программирования.