Выходное значение функции

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#1
Всем привет!
Вот столкнулся с какой проблемой...
Есть библиотека... в ней функция которая должна вернуть массив вот такого вида (тип Variant)
[1] ( [1.1] [1.2] [1.3]...)
[2] ( [2.1] [2.2] [2.3]...)
[3] ( [3.1] [3.2] [3.3]...)
Массив нормально формируется... Но вот к сожалению не получается вернуть такой массив как результат работы функции... при присваивании результата функции возникает ошибка Несоответствие типов
Если использовать глобальную переменную (тип Variant) в этой библиотеке возникает вторая проблема - на клиентах 7.хх эта переменная пустая :(
Пишу и тестирую на 8.5.1 - все отлично!
Подскажите, как выйти из этой ситуации?
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
#2
Это типа двухмерный массив string?

Можно его попробовать передать как параметр, заполнять в ф-ии, а из ф-ии возвращать boolean (т.е. True, если всё заполнилось правильно).

:(
 
K

KFire3

Гость
#5
А можно попробовать определить такой тип данных как класс, ну и дальше с ним и работать как с классом.

Вынести функции работы с таким массивом как методы класса, и потом не парится с обработкой в основном коде.

Я вижу только плюсы :( И вообще, я бы даже сказал что пытаться работать с такими структурами данных как с массивами вариантов - это извращение. От вот таких вещей и получаются потом абсолютно нечитаемые портянки кода на 200-300 строк.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 790
42
#6
KFire3
неее... спасибо... класс как-то писать не хочется.... геморроя больше чем пользы.. по крайней мере в моем варианте

Добавлено: Medevic
Ну а чего код смотреть?

функция
Код:
Function MyFn( doc as notesdocument ) as Variant
MyArray формируется так.
Код:
Dim myArray as variant
......
If IsArray( myArray) Then
ReDim Preserve myArray( UBound( myArray) + 1 )							
Else
ReDim myArray( 0 )
End If
myArray( UBound( myArray) ) = cell
возвращаю значение так
MyFn = myArray
 

TIA

:-)
Lotus team
15.05.2009
790
3
#7
NickProstoNick
Всё работает. Пример:

Код:
Sub Initialize
Dim y%, x%, vYX, vYX2, s$

vYX2 = fill( vYX ) 'два способа заполнения

For y = 0 To Ubound( vYX2, 1 )
s = ""
For x = 0 To Ubound( vYX2, 2 )
s = s & vYX2( y, x ) & ","
Next
Print s
Next
End Sub


Function fill( v ) As Variant
Const DY%=3
Const DX%=4
Dim Arr$( DY, DX), x%, y%

For y = 0 To Ubound( Arr, 1 )
For x = 0 To Ubound( Arr, 2 )
Arr(y, x) = y*10 + x
Next		
Next
v = Arr
fill = Arr
End Function