2009-02-27 13 views
4

Ich möchte eine Liste aus einer Funktion in LotusScript zurückgeben.Kann ich eine Liste aus einer LotusScript-Funktion zurückgeben?

z.

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() 

Ist das möglich?

Wenn ja, was ist die korrekte Syntax?

+1

Dies ist ein Beispiel, wie Lotus Notes/Domino Sie mit tausend Papierschnitten tötet .... – iconoclast

Antwort

2

Das funktioniert gut für mich. Ich habe einen Wert auf string und den anderen auf Integer gesetzt, damit Sie sehen, dass sich die Varianten selbst verhalten.

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

Es scheint, dass Sie nicht eine Liste aus einer Funktion zurückgeben kann.

Sie können es jedoch problemlos in eine Klasse einfügen und die Klasse zurückgeben.

z.

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 

Antwort wurde hier gefunden: LotusScript's List bug strikes again

+0

Ziemlich brillant. – iconoclast

+0

Gute Antwort! +1 aber .. Ugh, ich hasse Varianten! Sie könnten die Klasse so definieren, dass sie über die öffentliche Liste als NotesDocument verfügt (z. B. eine beliebige Klasse/ein beliebiger Typ). Auf diese Weise, wenn Sie ein foreach-x in der Liste "wrappedList.list" ausführen. End for: In der Liste hat die Indexvariable einen Typ. Andernfalls, wenn Sie es als Variante belassen, erhalten Sie in Notes Designer keine TypeAhead, da es sich um eine Variante handelt – user2808054

0

Sie eine Funktion toi Rückkehr eine Liste bekommen können, nur um loszuwerden "List" Bit in Ihrer Funktion, so dass anstelle von

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

. ..do:

Function myfunc() As Variant 

dann können Sie Ihre Funktion aufrufen, wie Sie bereits tun.

Dim mylist List As Variant 
mylist = myfunc() 

Listen sind groß und ich benutze sie die ganze Zeit, aber ich habe eine Einschränkung mit Listen gefunden ...

wenn, wenn eine Funktion wie haben:

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

setzen Sie einfach Muss eine Funktion haben, die eine Variante zurückgibt. Ich kann sehen, dass du es gerne objektorientiert machst, aber wenn du es einfach "machen willst", ist es am einfachsten.

Obwohl es mehrere Möglichkeiten gibt, dies zu tun, ist dies mein bevorzugter Weg. Beachten Sie, dass Sie eine Liste aller primitiven Datentypen erstellen können (zB String, Variante, Integer, Long usw.).

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 

myfunc verwenden ..

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

Sie Parameter hinzufügen können, wenn Sie MyFunc einfach definieren myfunc diese Weise müssen

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

Sie es mit Parametern, die die gleiche Art und Weise nennen wie dieser

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

Beachten Sie, dass "Variante" Ihr universeller Datentyp ist. Wichtig ist, dass myfunc als Variante die einzige Möglichkeit ist, Listen und Varianten aus einer Funktion zurückzugeben.

Verwandte Themen