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.
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
See Also
module
protect
type[module]
type[moduledefinition]
Download Help Document
What kind of issue would you like to report? (Optional)