Ну допустим is это вроде примерно так же как в C# работает… Вот:
type
t1=class end;
t2=class end;
t3=class end;
begin
var o:object;
//o := new t1;//разкомментируйте 1 из этих строчек и посмотрите что выведет
//o := new t2;
//o := new t3;
if o is t1(var o_t1) then
writeln($'type is t1 and value is {o_t1}') else
if o is t2(var o_t2) then
writeln($'type is t2 and value is {o_t2}') else
if o is t3(var o_t3) then
writeln($'type is t3 and value is {o_t3}') else
writeln($'type is undefined and value is ({o})');
end.
function IsTest<T>(obj: object; var res: T): boolean;
begin
if obj is T then
begin
res := T(obj);
Result := true;
end
else
begin
res := default(T);
Result := false;
end;
end;
procedure Deconstruct<T>(self: T; var res: T); extensionmethod;
begin
res := self;
end;
Их вообще ещё в 1 из предыдущих билдов добавили, я думал забыли убрать что то для дебага)
@admin давайте вернёмся к вопросу о лейблах в issue. Всё же разделять issue не так сложно, но обычно (по крайней мере в репозиториях что я видел) к каждой issue прикрепляют несколько лейблов. На сколько я понимаю, для паскаля будет правильно придерживаться указания хотя бы 3 лейблов:
Подгруппа как IDE, formatter bugs, Lambdas и т.п.;
1 из больших групп, то есть enhancement, bug или wrong error;
Билд в котором эта ошибка воспроизводится.
И так же ещё от случая к случаю возможны дополнительные, как wontfix (указывающая что надо срочно исправить) или old build (как причина закрыть issue).
К примеру у #872 тогда будут лейблы: match bugs, wrong error, bug и v3.4 b1670. Возможно bug лишнее, если считать что wrong error означает не только не правильную, а ещё и ошибку где её быть не должно.
Intellisense ещё большая группа - так она и выделена в отдельную
wontfix - это мы писали тут уже про “надо срочно исправить” - никто не сможет срочно исправить тяжёлую ошибку в случае если разработчик уже ущёл из проекта
Ну, под большими группами я как раз имел в виду разделение которое нужно вам, чтоб лишнее не мешало. То есть вот к примеру сделать чтоб у всех хотелок был лейбл enhancement, а у всех багов bug. В таком случае вы нажимаете на лейбл bug у любой issue или вводите в поиск соответствующий фильтр, и вуаля - хотелки уже не мешаются.
А под подгруппами я имел в виду разделение означающее сам вид issue. То есть, к примеру лейбл Intellisense может относится и к багам и к хотелкам. Вы вряд ли будете запускать поиск по этому лейблу, но он поможет вам с 1 взгляда на issue из списка - понять что она относится к анализатору кода.
На гитхабе 5 часов назад появилось 10 issue с модулем TypeClasses. Можете пожалуйста рассказать что это и с чем его едят? И особенности реализации для паскаля.
Пол часа назад была закрыта самая старая из открытых issue - #265. Теперь можно делать так:
type
B = class
x: real;
end;
A = class
b1 := new B;
property X: real read b1.x write begin b1.x := value; Print(value); end;
end;
var a1 := new A;
begin
a1.X := 2;
a1.X.Print;
end.