2

在 Visual Foxpro 应用程序中,其中一位用户收到错误(其余用户没有)。我相信这是因为数组以 arr(number) 而不是 arr[number] 的形式使用。有谁知道是什么导致单个用户出现这种奇怪的行为?

谢谢!

4

3 回答 3

1

Foxpro 不区分这两者。这实际上记录在DIMENSIONDECLARE命令的注释中。

事实上,文档并没有严格遵循一种或另一种方式。DIMENSION 和 DECLARE 命令用括号 () 定义语法。

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

但是文档的数组部分中提供的示例使用方括号 []。

DIMENSION ArrayName[5,2]
ArrayName[1,2] = 966789
于 2010-10-27T16:36:33.570 回答
1

使用数组引用都是有效的,只要它正确地平衡为 () 或 []。问题可能出在声明或准备数组的上游。我不得不调试像这样的历史上奇怪的实例,其中一个用户以与其他用户完全不同的方式处理流程,以及业务工作流程......无论如何,由于一些“绕过”流程,数组不是被创建并因此导致失败。

它是否总是在进程中的同一位置崩溃?

我强烈鼓励在这个“一个”用户的过程中进行一些错误捕获。更糟糕的是,我会在代码区域中添加一些东西,例如......

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

此外,我不知道您对错误捕获例程有什么,但我会在错误发生时获得内存转储以及使用户到达该点的完整调用堆栈。如果你需要这方面的帮助,也请告诉我。

于 2010-08-10T11:38:19.033 回答
0

我不明白为什么这个问题从 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 问题,单个用户不会因为使用 [] 或 () 而得到不同的结果。

于 2018-05-24T12:21:08.120 回答