Могу ли я вернуть список из функции LotusScript? - PullRequest
5 голосов
/ 27 февраля 2009

Я хочу вернуть список из функции в 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()

Возможно ли это?

Если это так, каков правильный синтаксис?

Ответы [ 4 ]

8 голосов
/ 27 февраля 2009

Кажется, вы не можете вернуть список из функции.

Вы можете легко обернуть его в классе и вернуть класс.

например.

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 снова появляется

2 голосов
/ 27 февраля 2009

Это прекрасно работает для меня. Я установил одно значение в строку, а другое в целое число, чтобы вы могли видеть, что варианты ведут себя сами.

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
1 голос
/ 30 декабря 2009

Проще говоря, у вас должна быть функция, которая возвращает вариант. Я вижу, что вам нравится делать это объектно-ориентированным способом, но если вы просто хотите «сделать это» процедурно, это самый простой способ.

Хотя есть несколько способов сделать это, это мой предпочтительный способ. Обратите внимание, что вы можете создать список любого примитивного типа данных (например, строка, вариант, целое число, длинный и т. Д.).

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, если вам нужно, просто определив myfunc таким образом

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

Вы называете это так же, как параметры

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

Обратите внимание, что "вариант" - это ваш универсальный тип данных. Важно то, что myfunc как вариант - единственный способ вернуть списки и варианты из функции.

1 голос
/ 27 мая 2009

Вы можете получить функцию, которая возвращает список, просто избавившись от бита «Список» в вашей функции, поэтому вместо

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

... сделать:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...