[Gambas-user] Gambas bug?

Fabián Flores Vadell fabianfloresvadell at ...626...
Fri Feb 10 23:36:50 CET 2012


2012/2/10 Emil Lenngren <emil.lenngren at ...626...>

> Can you give some examples how you mean?
> What do you need wrappers for?
> I don't think I understand fully what you mean, but it seems interesting :)
>
> /Emil
>

I would like to show you an example, but I can't.
If I did, I would have to kill you.  :P





There is a foolish example:


'*****************
' Class Person
'*****************

$FirstName As String
$LastName As String

Property Read FirstName As String
Property Read LastName As String

Public Sub _new(fname As String, lname As String)
  $FirstName = fname
  $LastName = lname
End

Private Function FirstName_Read() As String
  Return $FirstName
End

Private Function LastName_Read() As String
  Return $LastName
End

'*********************
' PeopleList class
'*********************

'aPeople is a collaborator from which I want to expose some methods (by the
PeopleList message protocol)

Private $aPeople As New Person[]

'The Call method implement the "instrospective call" "pattern" (okay, I
just made it up... but it works!)

Public Sub Call(aMethodName As String, Optional arguments As Array = Null)
As Variant
  Dim result As Variant

  If Not [Add, Clear, Count, Insert, {Max}].Exist(aMethodName) Then Return

  Object.Call($aPeople, aMethodName, arguments)

  Catch
    Return Object.GetProperty($aPeople, aMethodName)
End

'I want avoid code like this:

' Public Sub Add(aPerson As Person)
'   $aPeople.Add(aPerson)
' End
'
' Public Sub Insert(arrayPerson As Person[])
'   $aPeople.Insert(arrayPerson)
' End
'
' Public Sub Clear()
'   $aPeople.Clear
' End
'
' Property Read Max
'
' Private Function Max_Read()
'   $aPeople.Max
' End
'
'and so on

'More methods for PeopleList:

Public Sub PrintList()
  Dim aPerson As Person

  For Each aPerson In $aPeople
    Print aPerson.FirstName & ", " & aPerson.LastName
  Next
End

'**************
' Test Class
'**************

Static Public Sub Main()
  Dim aPeopleList As New PeopleList
  Dim MaxItems As Integer
  Dim Person1, Person2, Person3, Person4 As Person
  Dim Person5, Person6, Person7, Person8 As Person

  Person1 = New Person("Carlos", "Delfino")
  Person2 = New Person("Lionel", "Messi")
  Person3 = New Person("Luis", "Scola")
  Person4 = New Person("Emmanuel", "Ginóbili")

  'Here are introspective calls:
  With aPeopleList
    'Very ugly sintactically, but that is all we got
    .Call(.Insert, [[Person1, Person2, Person3]])
    .Call(.Add, [Person4])
  End With

  Person5 = New Person("Jhon", "Doe")
  Person6 = New Person("Jane", "Doe")
  Person7 = New Person("Nobody", "Gates")
  Person8 = New Person("Genius", "Minisini")

  'Here are introspective calls:
  With aPeopleList
    .Call(.Insert, [[Person5, Person6, Person7], .Call(.Max)])
    .Call(.Add, [Person8])
    Print .Call(.Count)
  End With

  aPeopleList.PrintList
End



> --
>
Fabián Flores Vadell
www.comoprogramarcongambas.blogspot.com
www.speedbooksargentina.blogspot.com



More information about the User mailing list