Passare senza variabile globale un valore ad una Funzione priva di argomenti

Da Gambas-it.org - Wikipedia.

E' possibile passare un valore ad una Funzione, priva di propri parametri (argomenti) e posta in un unico Modulo o Classe principale, senza potersi servire di:

  • variabili globali;
  • altri Moduli o Classi create dall'utente;
  • qualsiasi file esterno;
  • funzioni esterne;
  • comandi o programmi con Shell o Exec.

Insomma, tutto gestito a livello locale.

Per ottenere questo risultato si adopererà un Puntatore alla Funzione.

Mostriamo un semplice esempio:

Public Sub Main()  
 
 Dim p As Pointer  
 Dim st As Stream  
 Dim i As Integer  
  
' Creiamo un Puntatore alla Funzione:
  p = Calculus  
  
' Scriviamo nel Puntatore un valore mediante i "Memory Stream":
  st = Memory p For Write
  Write #st, 9 As Integer  
  st.Close  
  
' Invochiamo la Funzione:
  i = Calculus()  
  
  Print "Valore ritornato: "; i  
 
End  
 
 
Private Function Calculus() As Integer  
  
 Dim pC As Pointer
 Dim i As Integer
 
' Puntiamo nuovamente alla Funzione:
  pC = Calculus  
  
' Dereferenziamo il Puntatore (le variabili "p" e "pC" contengono il medesimo indirizzo di memoria:
' quello della Funzione) e ne utilizziamo il valore ottenuto per una qualsiasi operazione:
  i = Int@(pC) * 100

  Return i
  
End