[color=#0000D0]Private[/color] [color=#0000D0]Sub[/color] Class_Initialize() [color=#008000]'初始化[/color] tos = -1 Top = vbNull [color=#0000D0]End[/color] [color=#0000D0]Sub[/color]
[color=#0000D0]Public[/color] [color=#0000D0]Sub[/color] Push([color=#0000D0]Optional[/color] a [color=#0000D0]As[/color] Variant) [color=#008000]'给堆栈增加一个值[/color] [color=#0000D0]If[/color] tos + 1 >= [color=#FF0000]UBound[/color](x) [color=#0000D0]Then[/color] [color=#0000D0]RaiseEvent[/color] [color=#0000D0]error[/color](1, [color=#808080]"Stack overflow."[/color]) [color=#0000D0]ElseIf[/color] [color=#FF0000]IsMissing[/color](a) [color=#0000D0]Then[/color] [color=#008000]'使用 IsMissing 函数来检测在调用一个程序时是否提供了可选 Variant 参数[/color] tos = tos + 1 x(tos) = Top [color=#0000D0]Else[/color] tos = tos + 1 x(tos) = a Top = a [color=#0000D0]End[/color] [color=#0000D0]If[/color] [color=#0000D0]End[/color] [color=#0000D0]Sub[/color]
[color=#0000D0]Public[/color] [color=#0000D0]Function[/color] Pop() [color=#0000D0]As[/color] Variant [color=#008000]'从堆栈中取出一个值[/color] [color=#0000D0]If[/color] tos = -1 [color=#0000D0]Then[/color] [color=#0000D0]RaiseEvent[/color] [color=#0000D0]error[/color](2, [color=#808080]"Stack underflow."[/color]) [color=#0000D0]ElseIf[/color] tos = 0 [color=#0000D0]Then[/color] Pop = x(tos) Top = vbNull [color=#0000D0]Else[/color] Pop = x(tos) tos = tos - 1 Top = x(tos) [color=#0000D0]End[/color] [color=#0000D0]If[/color] [color=#0000D0]End[/color] [color=#0000D0]Function[/color]
[color=#008000]'ParamArray只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。[/color] [color=#008000]'使用 ParamArray 关键字可以提供任意数目的参数。[/color] [color=#008000]'ParamArray 关键字不能与 ByVal,ByRef,或 Optional 一起使用。[/color] [color=#0000D0]Public[/color] [color=#0000D0]Sub[/color] PushEx(ParamArray a() [color=#0000D0]As[/color] Variant) [color=#008000]'一次压入多个值[/color] [color=#0000D0]Dim[/color] z [color=#0000D0]As[/color] Variant [color=#0000D0]For[/color] [color=#0000D0]Each[/color] z In a [color=#0000D0]If[/color] tos + 1 >= [color=#FF0000]UBound[/color](x) [color=#0000D0]Then[/color] [color=#0000D0]RaiseEvent[/color] [color=#0000D0]error[/color](1, [color=#808080]"Stack overflow."[/color]) [color=#0000D0]Exit[/color] [color=#0000D0]Sub[/color] [color=#0000D0]Else[/color] tos = tos + 1 x(tos) = z [color=#0000D0]End[/color] [color=#0000D0]If[/color] [color=#0000D0]Next[/color] z Top = x(tos) [color=#0000D0]End[/color] [color=#0000D0]Sub[/color]
[color=#0000D0]Public[/color] [color=#0000D0]Sub[/color] Clear() [color=#008000]'初始化堆栈[/color] tos = -1 [color=#0000D0]End[/color] [color=#0000D0]Sub[/color]
哈哈~~类模块是个非常好玩的东东