Seite 1 von 1

[4.61] Liste als Parameter bei Definition nicht lokal

Verfasst: 14.01.2012 14:29
von Josef Sniatecki
Der Compiler meckert, obwohl es nichts zu meckern gibt:

Code: Alles auswählen

Global Dim Bar.i(0)

Procedure.i Foo(List Bar.i())
  ;...
EndProcedure
Der ungewünschte Fehler:

Code: Alles auswählen

Invalid name: same as an array
Mich wundert es, dass dieser Bug scheinbar noch nicht gefunden wurde, wenn doch, so ist es mir... äußerst peinlich :mrgreen:

Gruß Josef

Re: [4.61] Liste als Parameter bei Definition nicht lokal

Verfasst: 14.01.2012 15:05
von Andreas21
Das kann daran liegen das Arrayers nicht mit list übergeben werden sonder mit Array.

Info aus der PB Hilfe:

..... Es ist auch möglich, mit dem Array-Schlüsselwort ein Array als Parameter an eine Prozedur zu übergeben - es wird dabei "by reference" (was bedeutet, dass das Array nicht kopiert wird, sondern stattdessen die Funktionen in der Prozedur das originale Array manipulieren) übergeben. ......

Code: Alles auswählen

Procedure fill(Array A.l(1), length)  ; die 1 gibt hier die Anzahl der Dimensionen im Array an.
    For i = 0 To length
      A(i) = i
    Next i
  EndProcedure
  
  Dim A.l(10)
  fill(A(), 10)  ; das Array A() wird hier als Parameter übergeben
  
  Debug A(5)
  Debug A(10)
Und wenn du es Global hast brauchst du es nicht übergeben da du es ja benutzen kannst in der Procedure.
Es ist ja Global.

Re: [4.61] Liste als Parameter bei Definition nicht lokal

Verfasst: 14.01.2012 15:34
von ts-soft
Andreas21 hat geschrieben:Und wenn du es Global hast brauchst du es nicht übergeben da du es ja benutzen kannst in der Procedure.
Es ist ja Global.
Du übersiehst dabei aber, das die übergebene Variable und die globale nicht identisch sind. Die übergebene Variable ist
eine geschützte (protected) lokale Variable, die nur in der Procedure gültig ist und keinen Einfluss auf gleichnamige
globale Variable hat.

@Josef Sniatecki
Kann man als Bug sehen oder als nicht dokumentiertes nicht unterstütztes verhalten, was ja auch ein Bug ist :mrgreen:

Gruß
Thomas

Re: [4.61] Liste als Parameter bei Definition nicht lokal

Verfasst: 14.01.2012 15:42
von STARGÅTE
@Andreas21

Er wollte ja gerade beweisen, dass es nichts zu meckern gibt, weil der Parameter und die Globale Definition nix gemeinsam haben.

Richtig arbeitet tu das Protected aber:

Code: Alles auswählen

Global Dim A.i(10)

Procedure.i Foo(Array A.i(1))
	A(5) = 5
EndProcedure

Global Dim B.i(10)

Foo(B())

Debug B(5)
Debug A(5)
scheint also nur eine Fehlerhafte Fehlermeldung zu sein.

Re: [4.61] Liste als Parameter bei Definition nicht lokal

Verfasst: 14.01.2012 15:57
von ts-soft
@STARGÅTE
In Deiner Procedure fehlt die Dimensionsangabe oder ist das Absicht?

Re: [4.61] Liste als Parameter bei Definition nicht lokal

Verfasst: 14.01.2012 16:22
von STARGÅTE
Komisch beim kopieren war sie eigentlich da :lol: , habs editiert.