Named Modules - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


Home : Support : Online Help : Programming : Modules : Named Modules

Named Modules

 

Calling Sequence

Description

Examples

Calling Sequence

module ModuleName() export eseq; local lseq; global gseq; option optseq; description desc; statseq end module

Description

• 

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.

Examples

moduleMyModule_exporte;e2end module

moduleMyModuleexporte;end module

(1)

MyModule:-e

2

(2)

typeMyModule,protected

true

(3)

moduleaModuleend module

moduleaModuleend module

(4)

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_exporte1end module:

useNamedModuleine1end use

NamedModule:−e1

(5)

UnNamedModulemodule_exporte2end module:

useUnNamedModuleine2end use

e2

(6)

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:

num1make2

num1moduleNumberexportn;end module

(7)

num2make3.5

num2moduleNumberexportn;end module

(8)

typenum1,`module`Number

true

(9)

typenum2,`module`Number,n::integer

false

(10)

Local or exported named modules can be written in the names' declarations.

moduleMmodule_localLend module;module_exportEend moduleend module:

See Also

local_scope

module

module/local

protect

type/module

type/moduledefinition