Delphi array-Initialisierung
Momentan habe ich diese, und es nervt:
type TpointArray = array [0..3] of Tpoint;
class function rotationTable.offsets(pType, rotState, dir: integer): TpointArray;
begin
Result[0] := point(1, 1);
Result[1] := point(1, 2);
Result[2] := point(1, 1);
Result[3] := point(1, 1);
end;
aber stattdessen ich will etwas wie das hier tun:
class function rotationTable.offsets(pType, rotState, dir: integer): TpointArray;
begin
Result := [Point(1,1), Point(1,2), Point(1,1), Point(1,1)];
end;
Jedoch auf der Zusammenstellung wird, beschwert es sich, dass die [1, 2, 3, 4] syntax funktioniert nur für ganze zahlen.
Gibt es eine Möglichkeit zu instanziieren/initialisieren ein array of Tpoint ähnlich der Art, wie ich will?
InformationsquelleAutor der Frage Alex O | 2010-02-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Arrays von records intialised in const-Ausdrücke:
In XE7 ist es möglich, füllen Sie ein dynamisches array von records wie diese:
InformationsquelleAutor der Antwort Gerry Coll
Plainth Antwort zeigt den Konstruktor-syntax wie für dynamische arrays. Sie können direkt auf einer TPoint-array liefern eine viel einfachere Hilfsfunktion:
Aber das ist overkill. Delphi können Sie auch definieren, öffnen arrays inline, und es gibt keine zusätzlichen Konstruktor-Aufruf zu schreiben. Das Ergebnis verwendet Ihre ursprünglichen vorgeschlagenen syntax, aber mit dem array verpackt in einer Funktion aufrufen. Es funktioniert in allen Delphi-Versionen, während die "Anlegen" - syntax ist Recht neu.
Möchten Sie vielleicht zu prüfen, mit Gerry ' s Antwort nur, um Ihre arrays von Punkten aussagekräftige Namen, die vielleicht helfen bei der Fehlersuche und eine der acht magischen zahlen in diesen Punkt Definitionen ist falsch.
Schließlich, ein Hinweis auf das, was Delphi meinte, als er sagte, "der [1, 2, 3, 4] syntax funktioniert nur für ganze zahlen." Die syntax definiert eine setund nicht ein array. Man kann nicht eine Reihe von Datensatz-Werte, aber Sie kann haben eine Menge der ganzen zahlen. Ein Nebeneffekt ist, dass die syntax für eine Reihe von Integer-zahlen ist die gleiche wie die syntax für ein offenes array von ganzen zahlen. Ich denke, dass Delphi verwendet Kontext, um herauszufinden, was Sie bedeuten, aber es kann manchmal denke falsch.
InformationsquelleAutor der Antwort Rob Kennedy
Können Sie nicht, weil Sie nicht Ausdrücken können, im code-Körper einen Punkt in der Art und Weise, in der Sie sich Ausdrücken können in der
const
Abschnitt.Jedoch können Sie einige tricks, um Ihr Leben einfacher, vor allem, wenn Sie eine angemessene Anzahl von Punkten.
Implementieren Sie ein einfaches Verfahren, wie dies (code nicht getestet):
...wo TIntegerDynArray ist die RTL dynamisches array von Ganzzahlen. (In der Tat, es funktioniert mit jedem dynamischen Arrays). Auch, TPointArray im obigen Beispiel ist auch dynamisch.
So, in Ordnung, Ihre Arbeit zu tun, die Sie tun können, wie diese:
Dinge zu beachten:
BlendDimensions
auch auf andere Dinge, nicht nur auf diesen einenBlendDimensions
für 3 (oder mehr) DimensionenHTH
InformationsquelleAutor der Antwort John Thomas