2009-02-27 15 views
4

Je souhaite renvoyer une liste à partir d'une fonction dans LotusScript.Puis-je retourner une liste à partir d'une fonction LotusScript?

par ex.

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 bonne syntaxe?

+1

Ceci est un exemple de la façon dont Lotus Notes/Domino vous tue avec mille coupes de papier .... – iconoclast

Répondre

2

Cela fonctionne très bien pour moi. J'ai mis une valeur à la chaîne et l'autre à l'entier afin 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 
8

Il semble que vous ne puissiez pas retourner une liste à partir d'une fonction.

Vous pouvez facilement l'envelopper dans une classe et retourner la classe.

par ex.

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 

réponse a été trouvée ici: LotusScript's List bug strikes again

+0

Très brillant. – iconoclast

+0

Bonne réponse! +1 mais .. Ugh, je déteste les variantes! Vous pouvez définir la classe comme ayant List List List comme NotesDocument (par exemple - peut être n'importe quelle classe/type). De cette façon, quand vous faites un foreach x dans wrappedList.list .. End For, dans la liste, la variable d'index aura un type. Sinon, si vous le laissez comme variante, vous n'aurez pas de type typeahead dans Notes Designer car il s'agit d'une variante – user2808054

0

Vous pouvez obtenir une fonction toi retourner une liste, il suffit de se débarrasser du bit "Liste" dans votre fonction, donc au lieu de

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

. ..do:

Function myfunc() As Variant 

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

Dim mylist List As Variant 
mylist = myfunc() 

Les listes sont grandes et je les utilise tout le temps, mais j'ai trouvé une limitation des listes ...

si si 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 
1

vous mettre simplement doit avoir une fonction qui retourne une variante. Je peux voir que vous aimez le faire d'une manière orientée objet, mais si vous voulez simplement "le faire" procéduralement est le plus facile.

Bien qu'il y ait plusieurs façons de faire cela, c'est ma façon préférée. Notez que vous pouvez créer une liste de tout type de données primitif (par exemple, chaîne, variant, 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 vous devez simplement définir myfunc cette façon

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

Vous appelez de la même manière avec les paramètres comme ceci

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 d'une fonction.