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.
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
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.
UnNamedModule ≔ module_export⁡e2end module:
Module names can be used to check that different module instances were created by some common definition.
make := proc(x)
module Number() export n; end module;
Number:-n := x;
Download Help Document
What kind of issue would you like to report? (Optional)