Home Manual Packages Global Index Keywords Quick Reference |
#### 1.2.5.2 `local` statements The `save` and `restore` functions store and retrieve Yorick variables in self-descriptive binary files (called PDB files). To create a binary file ``demo.pdb'`, save the variables `theta`, `E`, `m`, and `c` in it, then close the file:
    f = createb("demo.pdb")
    save, f, theta, E, m, c
    close, f
To open this file and read back the `theta` variable:
    restore, openb("demo.pdb"), theta, c
For symmetry with `save`, the `restore` function has the unusual property that it redefines its parameters (except the first). Thus, `theta` is redefined by this `restore` statement, just as it would have been by a `theta=` statement. The Yorick parser does not understand this, which means that you must be careful when you place such a function call inside a function:
    func q_out_file(infile, Q, outfile)
    {
      if (!is_stream(infile)) infile = openb(infile);
      local theta;
      restore, infile, theta;
      return q_out(Q, outfile);
    }
This variant of `q_out` uses the `theta` variable read from `infile`, instead of an external value of `theta`. Without the `local` declaration, `restore` would clobber the external value of `theta`. This way, when `q_out_file` calls `q_out`, it has remembered the external value of `theta`, but `q_out` "sees" the value of `theta` restored from `infile`. When `q_out_file` finally returns, it replaces the original value of `theta` intact. Any number of variables may appear in a single `local` statement:
    local var1, var2, var3, var4;