Seite 1 von 1
Procedure Parameter StandardWert array
Verfasst: 29.01.2018 14:53
von marcelx
Hallo,
kann ich bei eine Procedure ein array-Parameter ein StandardWert verwenden?
Code: Alles auswählen
Procedure test(par1=0, Array listData(1)=???)
Debug Str(part1)+": "+Str(ArraySize(listData()))
EndProcedure
test(par1=1)
Dim listData(1)
listData(0)=10
listData(1)=20
test(par1=2, listData())
Gruß
MarcelX
Re: Procedure Parameter StandardWert array
Verfasst: 29.01.2018 15:24
von Bisonte
Das geht so nicht.
Was willst du denn da als Standardwert setzen ?
Vom logischen her müsste man dann ja ein "StandardArray" setzen....
Eventuell drehst du nur die Parameter um.....
dann kannst du noch weitere Parameter mit defaultwerten anhängen.
Re: Procedure Parameter StandardWert array
Verfasst: 29.01.2018 15:27
von mk-soft
List und Array können nicht als optionale Paramter verwendet werden.
Vieleicht nicht ein DummyArray() arbeiten
Code: Alles auswählen
Dim DummyArray(0)
Procedure foo(par1, Array listData(1))
Debug "UBound: " + ArraySize(listData())
If par1 >= 0 And par1 <= ArraySize(listData())
Debug ""+part1+": "+listData(par1)
ProcedureReturn listData(par1)
EndIf
EndProcedure
foo(1,DummyArray())
Dim listData(1)
listData(0)=10
listData(1)=20
foo(1, listData())
Re: Procedure Parameter StandardWert array
Verfasst: 29.01.2018 15:53
von marcelx
Danke für Ihr Antwort.
Der Sinn ist dass, in Abhängigkeit von par1 der array ausgewertet werden oder nicht.
Ich habe es mit ein DummyArray gelöst.
Ich wollte nur wissen ob ein bessere Lösung gab.
Danke und Gruß
MarcelX
Re: Procedure Parameter StandardWert array
Verfasst: 29.01.2018 19:23
von GPI
Mit einen Macro könnte man einen optionales Array Realiseieren
Code: Alles auswählen
Global Dim fakelistdata(0)
Procedure _test(par1, Array listData(1))
Debug Str(par1)+": "+Str(ArraySize(listData()))
EndProcedure
Macro test(par1=0,arry=fakelistdata())
_test(par1,arry)
EndMacro
test(1)
Dim listData(1)
listData(0)=10
listData(1)=20
test(2, listData())
Re: Procedure Parameter StandardWert array
Verfasst: 30.01.2018 12:04
von #NULL
Man kann die Arrays in eine Structure wrappen und den Parameter als pointer mit #Null default umsetzen. Allerdings musst du dann auch ausserhalb der Funktion immer die Struktur benutzen anstelle von einfachem Dim.
Code: Alles auswählen
Structure sListDataArray
Array arr.i(0)
EndStructure
Procedure test(par1 = 0, *listData.sListDataArray = #Null)
Debug ""
Debug "par1: " + par1
Debug "*listData: " + *listData
If *listData
Debug "listData: "+Str(ArraySize(*listData\arr()))
For i=0 To ArraySize(*listData\arr())
Debug " " + i + " = " + *listData\arr(i)
Next
EndIf
EndProcedure
test(1)
;Dim listData(1)
Define listData.sListDataArray
ReDim listData\arr(1) ; (or default size in structure)
listData\arr(0)=10
listData\arr(1)=20
test(2, listData)