变量的作用域和生命周期

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png

Apache OpenOffice Basic 中的变量具有有限的生命周期和作用域,在此生命周期和作用域内,可以在其他程序段中读取和使用该变量。变量的保留时间和访问位置取决于其指定的位置和类型。

局部变量

在函数或过程中声明的变量称为局部变量:

Sub Test
  Dim MyInteger As Integer
  ' ...
End Sub

局部变量仅在执行函数或过程时有效,此后将被重置为零。每次调用函数时,以前生成的值将不再可用。

要保留以前的值,必须将变量定义为 Static

Sub Test
  Static MyInteger As Integer
  ' ...
End Sub
Documentation note.png 与 VBA 不同,Apache OpenOffice Basic 可确保不会在模块标头中将局部变量名称同时用作全局变量和私有变量。在将 VBA 应用程序移植到 Apache OpenOffice Basic 时,必须更改所有重复的变量名称。

公共域变量

公共域变量是使用关键字 Dim 在模块标头部分中定义的。这些变量可用于其库中的所有模块:

模块 A:

Dim A As Integer
Sub Test
  Flip
  Flop
End Sub
 
Sub Flip
 A = A + 1
End Sub

模块 B:

Sub Flop
  A = A - 1
End Sub

Test 函数不会更改变量 A 的值,但 Flip 函数会将其增加 1,而 Flop 函数会将其减少 1。该变量的这些更改是全局性的。

也可以使用关键字 Public 声明公共域变量(而不是使用 Dim):

Public A As Integer

公共域变量仅在执行关联的宏时可用,此后将重置该变量。

全局变量

就功能而言,全局变量与公共域变量类似,不同的是在执行关联的宏后仍会保留全局变量值。全局变量是使用关键字 Global 在模块标头部分中声明的:

Global A As Integer

私有变量

Private 变量只能在定义它们的模块中使用。可以使用关键字 Private 定义这种变量:

Private MyInteger As Integer

如果几个模块包含名称相同的 Private 变量,Apache OpenOffice Basic 将会在每次出现该名称时创建一个不同的变量。在以下示例中,模块 AB 具有一个名为 CPrivate 变量。Test 函数首先在模块 A 中设置 Private 变量,然后在模块 B 中设置 Private 变量。

模块 A:

Private C As Integer
 
Sub Test
  SetModuleA      ' Sets the variable C from module A
  SetModuleB      ' Sets the variable C from module B
  ShowVarA        ' Shows the variable C from module A (= 10)
  ShowVarB        ' Shows the variable C from module B (= 20)
End Sub
 
Sub SetmoduleeA
  C = 10
End Sub
 
Sub ShowVarA
  MsgBox C        ' Shows the variable C from module A. 
End Sub

模块 B:

 
Private C As Integer
 
Sub SetModuleB
  C = 20
End Sub
 
Sub ShowVarB
  MsgBox C        ' Shows the variable C from module B.
End Sub
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools