Anfängerfragen zum Programmieren mit PureBasic.
marcelx
Beiträge: 424 Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
Beitrag
von marcelx » 29.01.2018 14:53
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
Win-10, PB 5.31 (Windows - x86)
Bisonte
Beiträge: 2430 Registriert: 01.04.2007 20:18
Beitrag
von Bisonte » 29.01.2018 15:24
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.
P ureB asic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom
mk-soft
Beiträge: 3701 Registriert: 24.11.2004 13:12
Wohnort: Germany
Beitrag
von mk-soft » 29.01.2018 15:27
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())
marcelx
Beiträge: 424 Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
Beitrag
von marcelx » 29.01.2018 15:53
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
Win-10, PB 5.31 (Windows - x86)
GPI
Beiträge: 1511 Registriert: 29.08.2004 13:18
Kontaktdaten:
Beitrag
von GPI » 29.01.2018 19:23
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())
#NULL
Beiträge: 2235 Registriert: 20.04.2006 09:50
Beitrag
von #NULL » 30.01.2018 12:04
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)