[Gambas-user] gb3: public array that is dimensioned later

Benoît Minisini gambas at ...1...
Thu Aug 4 03:03:35 CEST 2011


> On 08/03/2011 08:09 PM, Benoît Minisini wrote:
> >> On 08/03/2011 07:00 PM, Kevin Fishburne wrote:
> >>> I need to create a public array in a module but specify its dimensions
> >>> in a procedure later. Is this possible, and how would it be done
> >> 
> >> I forgot to mention, I'd like it to be a 2D array, though I could write
> >> workaround code if it has to be 1D.
> > 
> > You have to specify the array dimensions at the same time you create it.
> > So you have to create it in your later procedure.
> 
> Hmmm. It's been my experience that public variables have to be declared
> at the top of a module outside of the procedures and that Dim needs to
> be used inside procedures. Is there some way around this? The variables
> which determine the number of dimensions of the array are calculated
> from values input by the user, but need to be persistent and accessible
> from multiple separate procedures. If it's not possible I'll make it 1D
> and use code so that it can be treated as 2D, dimensioning it to
> "maximum realistic size" when it's created.

"Normal" arrays are entirely dynamic. So you can declare the variable that 
will own the reference to the array somewhere:

' Module SomeWhere

Public MyArray As Float[]

' Module SomeWhereElse

Private Sub CreateArray(X As Integer, Y As Integer)

  SomeWhere.MyArray = new Float[X, Y]

End Sub

' Module InAnotherDimension

Private Sub DoSomeStuff()

  Dim X, Y As Integer

  X = SomeWhere.MyArray.Bounds[0]
  Y = SomeWhere.MyArray.Bounds[1]

  ...

End

-- 
Benoît Minisini




More information about the User mailing list