如何在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
我们如何允许任意数量的参数?
答案 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语句需要指定更多参数的错误。