AW: Variablen in Stringliteral inlinen
Zitat:
Format('Mein Name ist %0:s und ich stamme aus %1:s', ['Max', 'Musterhausen']); Format('Ich stamme aus %1:s und mein Name ist %0:s', ['Max', 'Musterhausen']); Grüße TurboMagic |
AW: Variablen in Stringliteral inlinen
Zitat:
Write nutzt Compiler Magic. Das war zu Turbo Pascal Zeiten eine der häufigsten Fragen in den Newsgroups: "Wie kann ich eine Funktion oder Prozedure schreiben die wie Write eine variable ANzahl Parameter übergeben bekommt?" Antwort: "Geht nicht. Write ist Compiler Magic" ;-) Grüße TurboMagic |
AW: Variablen in Stringliteral inlinen
Jo, leider nicht genug Infos, aber mehr, als man bei sowas wie printf rein bekommt (dort garkeine Typ-Info, außer dem Wert oder einen Zeiger auf die Variable) und noch nichtmal die Anzahl der Parameter ist bekannt.
Hatte mal versucht ein Format zu basteln, wo die Daten wie bei printf übergeben werden. In Delphi kann man sowas leider auch nicht nativ schreiben, aber jedenfalls man eine Funktion ohne die Parameter schreiben, die als Export deklarieren und in der selben Datei wieder einen Import auf sich selber, der dann in der Definition diese offenen Parameter hat. Aber leider bekommt man eben keinerlei Infos die übergebenen Werte. Darum muß man dort auch selber im String das "genaue" Format angeben (nicht nur %d sondern auch ob Byte, Word, LongWord, ShortInt, SmallInt, LongInt usw.) Also in der Hinsicht ist Format doch recht einfach, auch wenn teilweise echt blöd ist. Ich kann nicht %p nehmen und dann ein Objekt oder Integer reingeben, der in der aktuellen Pointergröße (32 oder 64) ausgegeben wird. Oder einen Integer mit Tausenderpunkten, den muß man erst in einen Fließkomma umwandeln (x/1) und kann dann %.0n verwenden. (k.A. warum man nicht direkt einen Integer als Float darstellen darf usw.) Zitat:
Über die RTTI kann man ansonsten nur noch nativ "beliebige" Funktionen aufrufen. (siehe Invoke in System.RTTI.pas) |
AW: Variablen in Stringliteral inlinen
Oder man nimmt offene variante Array-Parameter:
Delphi-Quellcode:
procedure WriteValues(Values: array of const);
begin Write(String.Join(String.Empty, Values)); end; WriteValues(['hallo', 123]); |
AW: Variablen in Stringliteral inlinen
Zitat:
Ich denke ich werde das in meine Arbeitsweise aufnehmen. |
AW: Variablen in Stringliteral inlinen
Zitat:
|
AW: Variablen in Stringliteral inlinen
Zitat:
|
AW: Variablen in Stringliteral inlinen
Zitat:
|
AW: Variablen in Stringliteral inlinen
Zitat:
|
AW: Variablen in Stringliteral inlinen
Und Variant kann man sogar nativ um neue Typen erweitern. (Delphi hat z.B. seine AnsiString und UnicodeString dort reingepackt)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz