Named Modules
Calling Sequence
Description
Examples
module ModuleName() export eseq; local lseq; global gseq; option optseq; description desc; statseq end module
In some circumstances, it may be necessary for module members to "know" what module they belong to. For this reason, you can create a named module, using a slightly modified syntactic form of a module definition. It differs from the ordinary syntax only in the placement of a name between the module keyword and the parentheses that follow it.
Evaluating a named module definition causes, as a side effect, the assignment of the resulting module to the name, and the module name is stored in the attributes of each module member.
Note: This causes the specified name to be protected. Thus, evaluating a global named module definition more than once will generate an error. Evaluating a local definition in separate invocations of a procedure will produce multiple named modules, each with a separate (but identical looking) protected name.
When declaring a local or exported named module, the declaration of the name and module can be combined into a single declaration. The name does not need to be declared separately before associating it with the module definition.
Named modules are also used by the system for some purposes. Every module that is saved to a repository is given a name (that under which it was saved) for use by the persistent store.
The name of a named module, written as a string, can also be used as the first argument to the `module`(...) type. This indicates that the type should only match modules that have the specified name.
moduleMyModule_export⁡e;e ≔ 2end module
moduleMyModuleexporte;end module
MyModule:-e
2
type⁡MyModule,protected
true
moduleaModuleend module
Error, (in aModule) attempting to assign to `aModule` which is protected. Try declaring `local aModule`; see ?protect for details.
One reason for introducing named modules is so that the following distinction may be made when printing module member names in certain cases.
moduleNamedModule_export⁡e1end module:
useNamedModuleine1end use
NamedModule:−e1
UnNamedModule ≔ module_export⁡e2end module:
useUnNamedModuleine2end use
e2
Module names can be used to check that different module instances were created by some common definition.
make := proc(x) local Number; module Number() export n; end module; Number:-n := x; Number end proc:
num1≔make⁡2
num1 ≔ moduleNumberexportn;end module
num2≔make⁡3.5
num2 ≔ moduleNumberexportn;end module
type⁡num1,`module`⁡Number
type⁡num2,`module`⁡Number,n::integer
false
Local or exported named modules can be written in the names' declarations.
moduleMmodule_local⁡Lend module;module_export⁡Eend moduleend module:
See Also
local_scope
module
module/local
protect
type/module
type/moduledefinition
Download Help Document