Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как проверить что входной параметр является МАССИВОМ? / 15 сообщений из 15, страница 1 из 1
01.12.2004, 09:17
    #32806897
-=guest=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
Как проверить что входной параметр является МАССИВОМ?
...
Рейтинг: 0 / 0
01.12.2004, 09:33
    #32806932
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
on error do <ErrorManager>
alen(<ParamName>)
on error

Если параметр не массив возникнет ошибка 232.
...
Рейтинг: 0 / 0
01.12.2004, 10:10
    #32806976
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
В FoxPro массив не может иметь нулевой размерности. Т.е. хотя бы один элемент в нем должен быть. Значит можно проверить тип первого элемента массива:

Код: plaintext
1.
2.
3.
4.
5.
FUNCTION MyFunc
PARAMETERS tvPar

IF TYPE("tvPar[1]")<>"U"
* Переданный параметр - МАССИВ
ENDIF
...
Рейтинг: 0 / 0
01.12.2004, 14:31
    #32807686
-=guest=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
Спасибо, Владимир
Изящное решение!
...
Рейтинг: 0 / 0
02.12.2004, 12:11
    #32809257
Андрей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
А как явно объявить входной параметр массивом?
...
Рейтинг: 0 / 0
02.12.2004, 12:53
    #32809392
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
По-моему, никак.
...
Рейтинг: 0 / 0
02.12.2004, 12:54
    #32809402
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
И по значению массив, по-моему, тоже никак передать нельзя, только по ссылке.
...
Рейтинг: 0 / 0
02.12.2004, 12:59
    #32809416
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
А как явно определить что входной параметр Currency или Integer ?
...
Рейтинг: 0 / 0
02.12.2004, 14:23
    #32809692
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
2Urri

И по значению можешь передать

dimension aDim(1,2)

aDim(1,1)=1
aDim(1,2)=2

Procedure TestDim
lparameters taDim

?taDim(1)
?taDim(2)
...
Рейтинг: 0 / 0
02.12.2004, 14:24
    #32809695
Андрей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
Явно сказать, что входной параметр - массив, можно так:

Function Dim_to_str
Lparameter Mas,Razdel
Local N
N = ALEN(Mas)
Dimension Mas(N)
...
Рейтинг: 0 / 0
02.12.2004, 14:24
    #32809696
AleksMed
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
Для полноты

dimension aDim(1,2)

aDim(1,1)=1
aDim(1,2)=2
TestDim(aDim)

Procedure TestDim
lparameters taDim

?taDim(1)
?taDim(2)
...
Рейтинг: 0 / 0
02.12.2004, 14:50
    #32809782
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
Вообще-то, в FoxPro в принципе нет возмоности указать чем является входной параметр. Ни какого он типа, ни то, является ли он массивом.

Однако есть специальные директивы, предназначенные для компилятора.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
FUNCTION MyFunc
PARAMETER tvPar

EXTERNAL ARRAY tvPar
?tvPar[ 1 ]

RETURN
ENDFUNC

В данном контексте, команда EXTERNAL предназначена прежде всего для компилятора FoxPro. Чтобы на этапе компиляции такого кода не было ругани, что tvPar - это не массив. Т.е. мы явно указываем компилятору, что tvPar - это именно массив.

Но вот, является ли он при исполнении программы массивом на самом деле - далеко не факт.

Если параметр может как быть массивом, так и не быть, то лучше все-таки всегда этот параметр передавать именно как массив. Поскольку обращение к массиву только по имени означает обращение к первому элементу массива. А в командах присвоения - ко всем элементам массива одновременно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DIMENSION aTest( 2 )
aTest =  1 
?aTest[ 1 ]
?aTest[ 2 ]
aTest[ 1 ] =  2 
?aTest
?aTest[ 1 ]
?aTest[ 2 ]
...
Рейтинг: 0 / 0
03.12.2004, 11:23
    #32811294
Андрей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
EXTERNAL ARRAY tvPar - это то, что надо ,
для пресечения ругани компилятора
Спасибо, Владимир!
...
Рейтинг: 0 / 0
03.12.2004, 13:04
    #32811676
Александр Третьяков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
Я или передаю масив через & или использую

set udfparms to refer
...
set udfparms to value

все работает как часы.
...
Рейтинг: 0 / 0
04.12.2004, 00:20
    #32812866
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как проверить что входной параметр является МАССИВОМ?
Hi Александр!

Ты имел в виду через @
А заодно почитай хелп на предмет того, чем отличается вызов процедуры
от вызова функции (DO Some WITH ... от =some() ), и на что именно влияет SET
UDFPARAMS...

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как проверить что входной параметр является МАССИВОМ? / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]