Author Topic: (Erledigt) Sowas wie ByRef als Funktionsrückgabe  (Read 6075 times)

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10745
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Also.

Einen Zeiger auf ein Element bekommst Du mit:
ALIAS zeiger AS feld[index]
zeiger.xx

Oder Du übergibst an eine Funktion. Types werden _immer_ BYREF übergeben. Arrays auch.

Offline Markus

  • Mr. Polyvector
  • ***
  • Posts: 125
  • Offline
    • View Profile
@Kitty Hello  :enc:
danke, spiele ich mal mit rum  ;)

Wenn wie in der Hilfe dieses Each
Quote
FOREACH ref IN feld[]
...
NEXT

echt wie sowas ist
Quote
FOR i = 0 to BOUNDS(feld[],0)-1
   ref = feld
   ...
   feld = ref
NEXT
dann wäre nach Adam Riese ref schon eine Kopie.

Jede Sprache macht es anders , das Beispiel in der Hilfe war nützlich.

(mit "Objekten" die immer Byref übergeben werden kenne ich von MS,fände es aber logischer wenn es davor stehen würde weil die anderen wohl byval sind oder.)

 :x
« Last Edit: 2012-Apr-24 by Markus »

Offline Markus

  • Mr. Polyvector
  • ***
  • Posts: 125
  • Offline
    • View Profile
@Alle
Danke

Und falls das jemand interessiert  :booze:
Code: (glbasic) [Select]

TYPE TPlayer
Nr
Name$
x
y
Money

FUNCTION Draw:
SETPIXEL self.x,self.y,RGB(255,255,255)
ENDFUNCTION

FUNCTION Position: x,y
self.x=x
self.y=y
ENDFUNCTION

FUNCTION Update:

//<- 203 Cursors
//-> 205
//^  200
//V  208
//o   28 RETURN

LOCAL Name$=self.Name$ //for debug

IF KEY(205) // Taste nach rechts
IF self.x<800 THEN self.x=self.x+1
ENDIF

ENDFUNCTION

ENDTYPE

GLOBAL Players[] AS TPlayer

ALLOWESCAPE TRUE

MainLoop()
END

FUNCTION MainLoop:

LOCAL A AS TPlayer
A.Nr=1
A.Name$="Markus"
A.Position(100,300)

LOCAL B AS TPlayer
B.Nr=2
B.Name$="Computer"
B.Position(800-100,300)

DIMPUSH Players[],A
DIMPUSH Players[],B

REPEAT

FOREACH P IN Players[]
P.Draw()
NEXT

LOCAL i%
i=FindPlayer(1,Players[])
ALIAS P AS Players[i] //so vereinfacht die Schreibweise enorm und man arbeitet mit dem Original
P.Update() // Fragt nur die Rechts Taste ab

SHOWSCREEN

UNTIL FALSE

ENDFUNCTION

FUNCTION FindPlayer: Nr,List[] AS TPlayer //damit innen keine Globalen Variablen benutzt werden die Liste als Byref
LOCAL i%
FOR i = 0 TO BOUNDS(List[],0)-1
IF List[i].Nr=Nr
RETURN i
BREAK
ENDIF
NEXT
RETURN 0
ENDFUNCTION

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10745
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
FOREACH j IN ar[] ist sowas wie:
FOR I%= 0 to LEN(ar[])-1
   ALIAS j AS as
   j...
NEXT

Offline Markus

  • Mr. Polyvector
  • ***
  • Posts: 125
  • Offline
    • View Profile
@Kitty Hello
viel anders weiter geben konnte ich die Variable mit dem Alias nicht
aber das Alias hilft sehr damit es übersichtlicher bleibt.
Habe jetzt den dreh raus.