Заработало, спасибо, что быстро исправили))
var i := 5/5;
writeln(i.GetType);
анализатор кода воспринимает i
как int64
хотя writeln
выводит System.Double
Спасибо, что опубликовали Issue на Github
ещё 1 неприятный момент при форматировании должно быть так:
if true then
if true then
writeln(1) else
writeln(2) else
if true then
writeln(3) else
writeln(4);
а форматирование делает так:
if true then
if true then
writeln(1) else
writeln(2) else
if true then
writeln(3) else
writeln(4);
type
t1 = class
public procedure p1; abstract;
end;
t2 = class(t1)
procedure p1; override;
begin
end;
end;
Ошибка - нельзя понижать уровень доступа, если специально указать что у t2.p1
уровень доступа public
или убрать его у t1.p1
то ошибки нету, хотя он должен быть таким в любом случае.
Это не единственное неприятное свидетельство что стандартный уровень доступа хоть и похож но не public
, это так задумано? Ну и разумеется красивый код получается если у каждой подпрограммы ставить отдельно её уровень доступа, но иногда надо написать программу на 15 строчек чтоб что то протестировать и не заморачиваться.
writeln(abs(Single(5)).GetType);
выдаёт System.Double
хотя abs
для Single
есть
Так вроде же написано в Справке для виртуальных методов
При переопределении виртуального метода в подклассе его уровень доступа должен быть не ниже, чем в базовом классе. Например, public виртуальный метод не может быть переопределен в подклассе private-методом.
Так что это не ошибка, а так задумано.
Занятно, что если написать
begin
var r:=Abs(single(5));
Writeln(r.GetType)
end.
выдается System.double, хотя Intellisence показывает var r:integer; Но если сделать явное преобразование
begin
var r:=single(Abs(single(5)));
Writeln(r.GetType)
end.
выдается System.Single, хотя Intellisence по-прежнему показывает var r:integer;
P.S. Разработчики просили писать сообщения о явных ошибках на GitHub.
но я то не private
ставлю, а если его не ставить - должно восприниматься как public
, прочитайте внимательно что у меня написано
стоит пожалуй, но я не был на 100% уверен что это ошибки, с тем же public-private
состоянием)
кроме того насчёт ошибок форматирования - это не ошибки компилятора, куда их лучше писать как думаете?
По умолчанию уровень доступа - internal - сборочный. Явно такого ключевого слова нет. Мораль: указывайте уровень доступа явно.
разве сложно сделать стандартный уровень доступа public
? или в internal
есть какой то особый смысл?
Это вопрос к разработчикам
Это кто Вам сказал?
public по умолчанию - это плохо. Противоречит идее инкапсуляции.
writeln($FFFFFFFFFFFFFFFF);
writeln($FFFFFFFFFFFFFFFF:20);
выводит это:
18446744073709551615
255
begin
loop 1 do
try
except;
end;
end;
Форматирование “сжирает” строчку после except
begin
var s: Integer;
var a := 12345;
s := IntToStr(a).Sum(i -> i.Code - 48);
end.
Program24.pas(5) : Нельзя преобразовать тип real к integer
Что делаю не так?
Вы всё делаете правильно, это ещё 1 ошибка лямбд… Так работает:
begin
var s: Integer;
var a := 12345;
var sti:char->integer := ch -> ch.Code - 48;
s := IntToStr(a).Sum(sti);
end.
Так же можно поменять тип s
на System.Decimal
Абстрактные и авто классы сворачиваются не правильно:
можете добавлять в issues. ошибки с форматированием тоже. здесь они потеряются.
Нельзя сделать extensionmethod
статичной подпрограммы.
Что вы имеете в виду?