2009-02-27 97 views
4

我想从LotusScript中的函数返回一个列表。我可以从LotusScript函数返回一个列表吗?

例如。

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

这可能吗?

如果是这样,什么是正确的语法?

+1

这是Lotus Notes/Domino如何用一千个剪纸杀死你的一个例子.... – iconoclast 2013-04-30 13:28:06

回答

2

这对我很好。我已经将一个值设置为字符串,将另一个值设置为整数,以便您可以看到变体表现自己。

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

看来你不能从函数返回一个列表。

虽然您可以轻松地将其包装在课程中并返回课程。

例如。

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 

了答案在这里找到:LotusScript's List bug strikes again

+0

非常精彩。 – iconoclast 2013-04-30 13:30:00

0

你可以得到一个功能TOI返回一个列表,一下就在你的函数摆脱“目录”位,所以不是

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

。 ..do:

Function myfunc() As Variant 

然后你可以像你已经做的那样调用你的函数。

Dim mylist List As Variant 
mylist = myfunc() 

列表是伟大的,我用他们所有的时间,但我发现与名单一个限制......

如果要是有这样一个功能:

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

简单地说你必须有一个函数返回一个变体。我可以看到你喜欢以面向对象的方式来做,但如果你只是想“完成它”,程序上是最简单的。

虽然有几种方法可以做到这一点,但这是我首选的方法。请注意,您可以创建任何基本数据类型的列表(即字符串,变体,整数,长整数等)。

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 ..

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

您可以添加参数,如果你只需要定义MYFUNC这样

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

你把它与参数相同的方式需要到MYFUNC像这样

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

请注意,“变体”是您的通用数据类型。重要的是,myfunc作为变体是您可以从函数返回列表和变体的唯一方式。

相关问题