Navigation

Operators and Keywords

Function List:

C++ API

: varname = genvarname (str)
: varname = genvarname (str, exclusions)

Create valid unique variable name(s) from str.

If str is a cellstr, then a unique variable is created for each cell in str.

genvarname ({"foo", "foo"})
  ⇒
     {
       [1,1] = foo
       [1,2] = foo1
     }

If exclusions is given, then the variable(s) will be unique to each other and to exclusions (exclusions may be either a string or a cellstr).

x = 3.141;
genvarname ("x", who ())
  ⇒ x1

Note that the result is a char array or cell array of strings, not the variables themselves. To define a variable, eval() can be used. The following trivial example sets x to 42.

name = genvarname ("x");
eval ([name " = 42"]);
  ⇒ x =  42

This can be useful for creating unique struct field names.

x = struct ();
for i = 1:3
  x.(genvarname ("a", fieldnames (x))) = i;
endfor
  ⇒ x =
     {
       a =  1
       a1 =  2
       a2 =  3
     }

Since variable names may only contain letters, digits, and underscores, genvarname will replace any sequence of disallowed characters with an underscore. Also, variables may not begin with a digit; in this case an ‘x’ is added before the variable name.

Variable names beginning and ending with two underscores "__" are valid, but they are used internally by Octave and should generally be avoided; therefore, genvarname will not generate such names.

genvarname will also ensure that returned names do not clash with keywords such as "for" and "if". A number will be appended if necessary. Note, however, that this does not include function names such as "sin". Such names should be included in exclusions if necessary.

See also: isvarname, iskeyword, exist, who, tempname, eval.

Package: octave