5 votes

Puis-je retourner une liste à partir d'une fonction LotusScript ?

Je souhaite retourner une liste à partir d'une fonction en LotusScript.

eg.

Function myfunc() List As Variant
    Dim mylist List As Variant
    mylist("one") = 1
    mylist("two") = "2"
    myfunc = mylist
End Function

Dim mylist List As Variant
mylist = myfunc()

Est-ce possible ?

Si oui, quelle est la syntaxe correcte ?

8voto

molasses Points 1150

Il semble que l'on ne puisse pas renvoyer une liste à partir d'une fonction.

Vous pouvez facilement l'intégrer dans une classe et renvoyer la classe.

eg.

Class WrappedList
    Public list List As Variant
End Class

Function myfunc() As WrappedList
    Dim mylist As New WrappedList
    mylist.list("one") = 1
    mylist.list("two") = "2"
    Set myfunc = mylist
End Function

La réponse a été trouvée ici : Le bogue de la liste LotusScript frappe à nouveau

2voto

paxdiablo Points 341644

Cela me convient parfaitement. J'ai mis une valeur à string et l'autre à integer pour que vous puissiez voir que les variantes se comportent d'elles-mêmes.

Sub Initialize
    Dim mylist List As Variant
    Call myfunc(mylist)
    Msgbox "un  = " + mylist("one")
    Msgbox "deux = " + cstr(mylist("two"))
End Sub

Sub myfunc(mylist List As Variant)
    mylist("one") = "1"
    mylist("two") = 2
End Sub

1voto

Vous pouvez faire en sorte qu'une fonction renvoie une liste, il suffit de supprimer l'élément "Liste" dans votre fonction, c'est-à-dire qu'au lieu de

Function myfunc() List As Variant
   ...
End Function

...faire :

Function myfunc() As Variant

vous pouvez alors appeler votre fonction comme vous le faites déjà.

Dim mylist List As Variant
mylist = myfunc()

Les listes sont formidables et je les utilise tout le temps, mais j'ai découvert une limite aux listes...

si l'on dispose d'une fonction comme :

Public Function returnMyList() as Variant

   Dim myList List as Variant
   Dim s_test as String
   Dim i as Integer
   Dim doc as NotesDocuemnt
   Dim anotherList List as String

   '// ...set your variables however you like

   myList( "Some Text" ) = s_text
   myList( "Some Integer" ) = i
   myList( "Some Doc" ) = doc

   '// If you returned the list here, you're fine, but if you add
   '// another list...
   anotherList( "one" ) = ""
   anotherList( "two" ) = ""
   myList( "Another List" ) = anotherList

   '//  This will cause an error
   returnMyList = myList

   '// I bodge around this by writting directly to a List 
   '// that is set as global variable.

End Function

1voto

giuliocc Points 64

Pour faire simple, vous devez avoir une fonction qui renvoie une variante. Je comprends que vous aimiez le faire d'une manière orientée objet, mais si vous voulez juste "le faire", la méthode procédurale est la plus facile.

Bien qu'il existe plusieurs façons de procéder, voici celle que je préfère. Notez que vous pouvez créer une liste de n'importe quel type de données primitives (chaîne de caractères, variante, entier, long, etc.).

Function myfunc as variant
    dim mylist list as variant
    mylist("somename") = "the value you want to store"
    mylist("someothername") = "another value"
    myfunc = mylist

End Function

Pour utiliser myfunc

sub initialise
    dim anotherlist list as variant
    anotherlist = myfunc
end sub

Vous pouvez ajouter des paramètres à myfunc si nécessaire en définissant simplement myfunc de la manière suivante

function myfunc(val1 as variant, val2 as variant) as variant

Vous l'appelez de la même manière avec des paramètres comme celui-ci

anotherlist = myfunc("a value", "another value")

Notez que "variant" est votre type de données universel. Ce qui est important, c'est que myfunc en tant que variante est la seule façon de renvoyer des listes et des variantes à partir d'une fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X