Mir ist grade die krankeste Idee gekommen, für einen Code:
Delphi-Quellcode:
for i in(function:TArray<Integer>var i:Integer;begin SetLength(Result,5);for i:=0to 4do Result[i]:=i*10;end)()do
ShowMessage(Variant(i));
Eigentlich sollte es doch nervig sein, wenn wunderschöner Delphi-Code urplötzlich wie eine C-Krankheit aussieht, oder etwa nicht?
PS: Das ist die Kurzfassung einer
for i := 0 to 40 step 10 do
-Schleife ... falls man es, aus welchen Gründen auch immer, tatsächlich nicht erkennen sollt.
Delphi-Quellcode:
var
i2: integer;
for i2 in (function: TArray<Integer>
var
i: Integer;
begin
SetLength(Result, 5);
for i := 0 to 4 do
Result[i] := i * 10;
end)() do
ShowMessage(IntToStr(i2));
Ich geb's zu, am Ende hab ich es dann doch noch so gelöst.
Delphi-Quellcode:
var
i, i2: integer;
for i := 0 to 4 do begin
i2 := i * 10;
ShowMessage(IntToStr(i2));
end;
Oder wenigstens so
Delphi-Quellcode:
for i in TArray<Integer>.Create(0, 10, 20, 30, 40) do
ShowMessage(IntToStr(i));
Ich hoffe jetzt wendet niemand genervt dem Delphi den Rücken zu und wanders zu QBasic ab.
Aber wirklich nervig ist eigentlich, daß
TArray<Integer>
und
array of Integer
nicht kompatibel sind, obwohl
TArray<T>
auch nur ein
array of T
ist
Delphi-Quellcode:
var
G: TArray<Integer>;
D: array of Integer;
D := G; // [DCC Fehler] U.pas(56): E2010 Inkompatible Typen: 'TArray<System.Integer>' und 'Dynamic array'
Aber OK, man soll sich ja nicht so aufregen ... an der sonst so kranken Vererbungsreihe der Generics liegt es dieses Mal nicht direkt.
Delphi-Quellcode:
var
X: array of Integer;
D: array of Integer;
X := D; // [DCC Fehler] U.pas(56): E2008 Inkompatible Typen
Denn der Witz ist, daß das sonst so typsichere/strenge Delphi durch die Generics "scheinbar" total verweichlicht wird.
Delphi-Quellcode:
var
X: TArray<Integer>;
D: TArray<Integer>;
X := D; // denn das geht zumindestens ^_^