Visual FoxPro中的变量函数

时间:2014-11-18 20:10:53

标签: variadic-templates visual-foxpro variadic-macros variadic-functions

如何在Microsoft Visual Foxpro中编写Variadic函数?

可变函数是接受可变数量参数的函数 - 参见http://en.m.wikipedia.org/wiki/Variadic_function。世界上http://rosettacode.org/wiki/Variadic_function几乎所有其他编程语言都给出了例子,但不是好狐狸。

所以给出以下功能:

Function PrintVars(var1,var2,var3)
    ? var1
    ? var2
    ? var3
End Func

我们如何允许任意数量的参数?

2 个答案:

答案 0 :(得分:2)

我不同意这是一种有限的能力。你不需要做任何特别的事情。默认情况下,VFP允许您传递少于指定数量的参数。

另外,请勿使用PARAMETERS()函数查看收到的参数数量。它有一个缺陷;如果在使用它之前调用另一个例程,它会告诉您传递给该例程的参数数量。请改用PCOUNT();它总是告诉你有多少参数传递给当前例程。

以下是一些代码,用于演示PARAMETERS()的错误:

DEBUG

Subproc("abc", 123)

RETURN

PROCEDURE Subproc(cParm1, nParm2)

DEBUGOUT "Immediately on entry to Subproc"
DEBUGOUT "  PARAMETERS() returns ", PARAMETERS()
DEBUGOUT "  PCOUNT() returns ", PCOUNT()

Subsubproc()

DEBUGOUT "After call to Subsubproc"
DEBUGOUT "  PARAMETERS() returns ", PARAMETERS()
DEBUGOUT "  PCOUNT() returns ", PCOUNT()

RETURN

PROCEDURE Subsubproc

RETURN

运行此代码后,请查看“调试输出”窗口。

答案 1 :(得分:1)

您在VFP中执行此操作的能力有限。

FUNCTION printvars
PARAMETERS p1, p2, p3, p4
    ? "Parameter count", PARAMETERS()
    ? p1
    ? p2
    ? p3
    ? p4
RETURN

这样称呼:     printvars(1,2)

,您的结果将是:

Parameter count    2
         1
         2
.F.
.F.

VFP将初始化您未使用逻辑F显式传递的任何参数。值。 PARAMETERS()函数显然告诉你实际传递了多少。

传递过多参数会导致PARAMETER语句需要指定更多参数的错误。