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

Code: Alles auswählen

Procedure test(Array listData(1), par1=0)
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)