String Var aus Type -> Inhalt aus globaler String Var

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

DaysShadow

Betreff: String Var aus Type -> Inhalt aus globaler String Var

BeitragFr, Dez 03, 2010 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Titel mag komisch sein, mir fiel einfach nichts passendes knackiges ein.

Folgender Code stellt mein Problem dar, ich habe einen Type der eine String Variable hat, die im Prinzip aber stets den Inhalt einer globalen Variablen anzeigen soll.
Wie bekomme ich das hin? String Ptr gibt es nicht, ist auch an sich klar, ein String hat ja keine feste Größe, daher lässt sich da schlecht irgendwo hinzeigen bzw. hinzeigen schon, nur kommt man ohne die Länge des Strings nicht wieder an den Inhalt...

Also vom Prinzip soll _text immer den Inhalt einer globalen String Variable enthalten, ohne dass ich irgendwo einen Funktionsaufruf mit entsprechender Zuweisung habe.
Geht sowas? Denke ich vllt. auch viel zu kompliziert? Mr. Green

BlitzMax: [AUSKLAPPEN]
SuperStrict

Type TTest

Field _text:String

Method Init:TTest( text:String ) 'Hier wird einfach nur der Inhalt kopiert und da haperts wohl auch.

_text = text

Return Self

End Method

Method GetText:String( )

Return _text

End Method

End Type

Global blubb:String = "Hallo Welt"

Global test:TTest = New TTest.Init( blubb )

Print blubb
Print test.GetText( )

blubb = "Whatever"

Print blubb 'Ist "Whatever", ist ja klar und auch richtig
Print test.GetText( ) 'Sollte "Whatever" werden, ist aber "Hallo Welt"


Ich bedanke mich schonmal Wink
Blessed is the mind too small for doubt
 

undefined

BeitragFr, Dez 03, 2010 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
"String-Pointer" musst Du Dir leider selberbasteln. Entweder über eine Objektklasse oder eine Map. Beides funktioniert dann nur über Umwege, ist ansich aber nicht wirklich umständlich.

1) Ein TString-Objekt, dass den String in einem Feld speichert. Alle "Pointer" sind nun keine Strings mehr, sondern verweisen auf das entsprechende TString-Objekt.

2) Eine Map, in der Du alle notwendigen, globalen Strings speicherst. Für die Einträge wählst Du als Namen die Bezeichner des globalen Strings und als Werte eben die gewünschten Texte. Alle "String-Pointer" bleiben Strings und speichern den Bezeichner, auf den sie verlinken sollen. Über diesen holst Du Dir dann aus der Map den zugehörigen Texteintrag.

Mit 2-3 Hilfsfunktionen/-methoden sind beide Möglichkeiten gut und einfach umzusetzen.

DaysShadow

BeitragFr, Dez 03, 2010 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke sehr, das hat sehr geholfen und ich denke mein Problem ist schon damit auch schon gelöst Smile
Blessed is the mind too small for doubt

mpmxyz

BeitragFr, Dez 03, 2010 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist auch möglich, über ein Objekt auf globale Type-Variablen zuzugreifen:
BlitzMax: [AUSKLAPPEN]
Type TTest
Global vars:String
EndType

Local test:TTest=New TTest
TTest.vars="abc"
Prinnt test.vars

Wenn du immer nur den einen gleichen Wert an verschiedenen Stellen haben möchtest, ist es aber sowieso nicht richtig, mehrere Variablen dafür einzuführen.
Wenn du mehrere zu aktualisierende Variablen hast, kannst du dir auch etwas mit Arrays zusammenbasteln. Diese sind dann eine vereinfachte TString-Objektvariante.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group