Visual Foxpro Array [] или () - PullRequest
       17

Visual Foxpro Array [] или ()

2 голосов
/ 09 августа 2010

В приложении Visual Foxpro один из пользователей получает ошибку (остальные нет).И я верю, потому что массивы используются в виде arr (число) вместо arr [число].Кто-нибудь знает, что вызывает это странное поведение у одного пользователя?

Спасибо!

Ответы [ 3 ]

1 голос
/ 27 октября 2010

Foxpro не делает различий между ними.Это на самом деле задокументировано в комментариях к командам DIMENSION и DECLARE .

На самом деле документация строго не следует тем или иным образом.Команды DIMENSION и DECLARE определяют синтаксис с круглыми скобками ().

DIMENSION ArrayName1(nRows1 [, nColumns1]) [AS cType]
   [, ArrayName2(nRows2 [, nColumns2])] ...

Но в примере, представленном в разделе документации Arrays , используются скобки [].

DIMENSION ArrayName[5,2]
ArrayName[1,2] = 966789
1 голос
/ 10 августа 2010

Любое использование ссылок на массив допустимо до тех пор, пока оно правильно сбалансировано как () или [].Проблема, вероятно, в восходящем потоке, где массив объявляется или готовится.Мне приходилось отлаживать исторически странные примеры, подобные этому, когда один пользователь делал процесс совершенно иначе, чем другие, и рабочий процесс ... Во всяком случае, из-за какого-то «обойденного» процесса массив не былсоздание и, следовательно, принудительный сбой.

Всегда ли происходит сбой в одном и том же месте процесса?

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

if atc( "PersonsLoginName", sys(0)) > 0
   TurnOnMyCustomDebugging()   && for this special scenario trapping
endif 

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

0 голосов
/ 24 мая 2018

Я не понял, почему этот вопрос был "поднят" с 2010 года. Может быть, потому что это своего рода "основы VFP" и нужны подробности?

Ответы уже хороши.[] и () могут быть использованы.Это в первую очередь предпочтение.

VFP на самом деле даже не волнует, обозначает ли имя и массив.Это может быть функция, принимающая один или два целочисленных параметра (1..N).Однако, если в области видимости есть массив, он имеет приоритет.Пример:

Dimension Dummy[10]
? Dummy[5]    && prints .F. - array members are not initialized
Dummy[2] = 6  && sets array member
? Dummy[2]    && prints 6
Release Dummy && array variable released

? Dummy[5]    && prints 10 - procedure is called
* Dummy[2] = 6  && error - variable does not exists
? Dummy[2]    && prints 4 - procedure is called

Procedure Dummy(tnDim1)
   Return m.tnDim1 * 2
endproc

Не имеет значения, если вы использовали [] или () для массива или функции (или процедуры - в процедуре и функции VFP также нет разницы, как для приема параметров, так и для возврата результата).

Что касается вопроса OP, у одного пользователя не будет другого результата только потому, что используются [] или ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...