Procedure Parameter StandardWert array

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Procedure Parameter StandardWert array

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: Procedure Parameter StandardWert array

Beitrag 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.....

Code: Alles auswählen

Procedure test(Array listData(1), par1=0)
dann kannst du noch weitere Parameter mit defaultwerten anhängen.
PureBasic 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​​
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Procedure Parameter StandardWert array

Beitrag 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())
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
marcelx
Beiträge: 424
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Procedure Parameter StandardWert array

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Procedure Parameter StandardWert array

Beitrag 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())
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Procedure Parameter StandardWert array

Beitrag 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)
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten