Strings sind dynamische Objekte und müssen in Strukturen die du selbst erstellst initialisiert werden.
Außerdem musst du bei deinem Interface bei den Prozeduren (bzw. Methoden) den RückgabeTyp angeben.
Also:
Code: Alles auswählen
Interface Str
Delete ()
String.s () ; für Strings wie in Procedure.s IString() bzw. Procedure$ IString()
EndInterface
und weiter unten
AllocateStructure() kannst du später auch gut gebrauchen, wenn du zB Arrays und Listen benutzt.
Außerdem dann auch bei freigeben:
damit auch die Strings gelöscht werden.
Edit: hier noch ein anderes weiterführendes Beispiel:
Code: Alles auswählen
Interface Statistic
Add(Value.f)
Count.i()
Free()
Mean.f()
String.s()
EndInterface
DeclareModule Statistic
Declare.i New()
EndDeclareModule
Module Statistic
Structure StatisticData
*Methodes
List Value.f()
EndStructure
Procedure Add(*This.StatisticData, Value.f)
AddElement(*This\Value())
*This\Value() = Value
EndProcedure
Procedure.i Count(*This.StatisticData)
ProcedureReturn ListSize(*This\Value())
EndProcedure
Procedure.i Free(*This.StatisticData)
FreeStructure(*This)
EndProcedure
Procedure.f Mean(*This.StatisticData)
Protected Sum.f
ForEach *This\Value()
Sum + *This\Value()
Next
ProcedureReturn Sum / Count(*This)
EndProcedure
Procedure.s String(*This.StatisticData)
Protected String.s
If FirstElement(*This\Value())
String = StrF(*This\Value())
While NextElement(*This\Value())
String + ", "+StrF(*This\Value())
Wend
EndIf
ProcedureReturn String
EndProcedure
Procedure.i New()
Protected *This.StatisticData = AllocateStructure(StatisticData)
*This\Methodes = ?Methodes
ProcedureReturn *This
EndProcedure
DataSection
Methodes:
Data.i @Add()
Data.i @Count()
Data.i @Free()
Data.i @Mean()
Data.i @String()
EndDataSection
EndModule
Table.Statistic = Statistic::New()
Table\Add(2.0)
Table\Add(4.0)
Table\Add(5.0)
Debug Table\String()
Debug Table\Count()
Debug Table\Mean()
Table\Free()