![]() |
Funktion('string').membervar
moin,
siehe topic, kann ich sowas irgendwie hinbekommen? ich möchte das der teil: "funktion('irgendeinstring')" den rekord zurückgibt wo die membervariable "irgendeinstring" ist und dann halt mit .membervar weiterarbeiten. schwer zu erklären was ich meine aber vielleicht verstehts ja jemand. ich machs mal "bildlicher" *g* sagen wir mal ich habe folgendes:
Delphi-Quellcode:
type
TMeinRekord = record name: string; nickname: string; end; var MeinRekordArray: array[0..9] of TMeinRekord; ... procedure irgendwas; begin EineFunktion('peter').nickname end; ich möchte also das mir "einefunktion" den passenden (anhand des namens) rekord liefert und möchte dann dessen nickname bekommen... wie mach ich das? das mit einer schleife gesucht werden muss ist mir klar, ich weiss nur nicht wie ich die funktion dann mit ".nickname" verbinde |
Re: Funktion('string').membervar
Delphi-Quellcode:
Das Problem ist jedoch, das du eine Kopie deines Records bekommst.
procedure EineFunktion(SearchName: String): TMeinRekord;
begin ... ... result := MeinRekordArray[i]; end; |
Re: Funktion('string').membervar
Hallo Pseudemys Nelsoni,
so sollte es i.A. klappen:
Delphi-Quellcode:
function GetRecordFromArrayThatMatchtesCriteria(const ACriteria: TCriteria): TMyRecord;
var i: Integer; begin for i := Low(AnArray) to High(AnArray) do if RecordsMatchesCriteria(AnArray[i], ACriteria) then begin Result := AnArray[i]; Exit; end; // no record found raise ERecordNotFound.Create('No suitable record found', ACriteria); end; |
Re: Funktion('string').membervar
@ Bernhard Geyer:
Das geht nicht, so wie ich deinen Quelltext sehe. Bei Prozeduren kannst du kein Result zurückgeben, dazu musst du eine Funktion definieren ;-) |
Re: Funktion('string').membervar
Nur mal so für mich :shock:
Was denn TCriteria und RecordsMatchesCriteria. Das kenn ich ja noch garnicht. War das nur als Beispiel gedacht, oder gibts das wirklich? |
Re: Funktion('string').membervar
moin, danke für die antwort :)
|
Re: Funktion('string').membervar
Zitat:
|
Re: Funktion('string').membervar
und was spricht gegen dein einfachen und bewährten Weg?
Delphi-Quellcode:
type
TMeinRekord = record name: string; nickname: string; end; var MeinRekordArray: array[0..9] of TMeinRekord; function EineFunktion(s: string): TMeinRekord; ... function EineFunktion_nickname(s: string): string; begin result := EineFunktion(s).nickname; end; ... procedure irgendwas; begin EineFunktion_nickname('peter') end; |
Re: Funktion('string').membervar
Ich kann auf den ersten Blick keinen Vorteil bei Deinem Ansatz erkennen, himitsu. Die Daten stehen weiterhin nur als Kopie zur Verfügung, es ist mehr Aufwand (zur Entwicklung sowie geringfügig zur Laufzeit) und bei einer Änderung der Struktur des Records oder Änderung der Bezeichnungen ist es erforderlich, die Zugriffsfunktionen anzupassen...
Übersehe ich etwas? Wo hat sich diese Art des Zugriffs bisher bewährt? :gruebel: |
Re: Funktion('string').membervar
hm, das stimmt, das es ne kopie ist ist doof, das bringt mir recht wenig.... könnte ich einen pointer verwenden?
|
Re: Funktion('string').membervar
*hochschieb* :-D
ich muss einer membervariablen meines rekords(der zurückgegeben wird) doch auch einen wert zuweisen können. Ich brauche soetwas wie das hier:
Delphi-Quellcode:
MeineFunktion('andy').nickname := 'iAmAndy'
das kann doch nicht unmöglich sein oder :?: |
Re: Funktion('string').membervar
In diesem Fall musst Du mit Referenzen arbeiten. Verwende hierzu entweder direkt Exemplar von Klassen statt Records oder erstelle einen weiteren Typen hier:
Delphi-Quellcode:
von dem der Rückgabewert Deiner Funktion sein sollte.
type
PMyRecord = ^TMyRecord; Während Du im klassichen Pascal so einen Pointer auf Dein Record bei der Verwendung derefenzieren musstest
Delphi-Quellcode:
ist das in Delphi nicht länger erforderlich, so dass Dein Aufruf der Form
var
myReference: PMyRecord; begin // !ensure that myReference points to valid data! myReference^.AField := AValue
Delphi-Quellcode:
möglich ist. Du benötigst jedoch ein Konzept für den Fall, dass keine passende Referenz gefunden wurde (zB das Auslösen einer Exception), damit Du nur auf gültigen arbeitest.
function MyFunction(const AString: string): PMyRecord;
//.. MyFunction(AValue).AField := AnotherValue; |
Re: Funktion('string').membervar
Hallo,
wie wäre es denn wenn man aufhört in Records zu denken und statt dessen in Objekten denkt. Dann ist das mit der Kopie auch kein Problem mehr. |
Re: Funktion('string').membervar
@choose, danke, so gehts ^^
@jens, wenn ich z.b nur 3 variablen habe, wäre eine klasse doch nicht nötig oder? vorallem ist das create/destroy nervig bei klassen :\ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz