Type Assertions - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.
Our website is currently undergoing maintenance, which may result in occasional errors while browsing. We apologize for any inconvenience this may cause and are working swiftly to restore full functionality. Thank you for your patience.

Online Help

All Products    Maple    MapleSim


::

the :: operator

 

Calling Sequence

Parameters

Description

Thread Safety

Examples

Compatibility

Calling Sequence

x :: T

Parameters

x

-

any expression

T

-

a type specification

Description

• 

The :: operator serves several purposes in Maple, all related to types.

• 

When used in a procedure parameter declaration, the left-hand side of the operator specifies the parameter name, and the right-hand side specifies the expected type of the argument.

• 

The return type of a procedure can be declared by following the procedure's parameter declaration sequence by ::T . In this context, :: serves as an assertion that the procedure returns a value of the specified type, T. If assertions are enabled, returning a value not matching the type will raise an exception.

• 

When used as the left-hand side of an assignment statement or as the first argument to the assign function, x::T asserts that the value being assigned to x is of type T.

• 

A local variable can be declared with a type by using the :: operator. Within the procedure in which the variable is declared, any assignments made to it are treated as if the left-hand side of the assignment were written using the :: declaration.

• 

If a local variable was declared with a type, and the left-hand side of an assignment to that local variable also specifies a type, then the value being assigned must satisfy both types.

• 

The :: operator can also be used to assert a type on the control variable(s) of a for loop. For example, when iterating over the contents of a container such as a list, the :: operator can assert that each entry is of a specified type.

• 

In the condition of an if or while statement, :: serves as a type testing operator. In this context, x::T is equivalent to type(x,T).

• 

The :: operator also acts as a type test when used as an argument to any of the Boolean operators, and, or, not, xor, implies, or the evalb function.

• 

In any other context, :: evaluates its arguments, but does not itself evaluate any further. Thus, it can be used as a data structure or part of a larger data structure. Although it is not required, it is customary to use :: as a data structure only when the right-hand side represents a type or a type-like concept. For example, see RealRange.

• 

An expression using the :: operator is of type `::`.

Thread Safety

• 

The :: operator is thread-safe as of Maple 15.

• 

For more information on thread safety, see index/threadsafe.

Examples

A common use of :: is to declare the type of procedure parameters.

f := proc( x::integer ) x^2 end proc:

f2

4

(1)

f3.4

Error, invalid input: f expects its 1st argument, x, to be of type integer, but received 3.4

The :: operator can assert the return type of a procedure.

f := proc( x::integer ) :: odd; x^2 end proc:

kerneloptsassertlevel=2:

f3

9

(2)

f4

Error, (in f) assertion failed: f expects its return value to be of type of odd, but computed 16

Using :: on the left-hand side of an assignment, declaring a local variable with ::, or adding :: to a loop variable, asserts that the value being assigned is of the specified type.

x::integer3.4

Error, assertion failed in assignment to x, expected integer, got 3.4

f := proc( x ) local y::integer;
    y := x
end proc:

f4.5

Error, (in f) assertion failed in assignment to y, expected integer, got 4.5

forz::integerin1.2,3,4dozenddo

Error, assertion failed in assignment to loop variable z, expected integer, got 1.2

In the condition of an if (or while) statement, the :: operator is equivalent to using the type function.

f := proc( x )
    if x::integer then
        print("an integer")
    else
        print("not an integer")
    end if
end proc:

f2

an integer

(3)

f3.4

not an integer

(4)

The :: operator is inert if used out of context.

x2

x2

(5)

x::integer

2::

(6)

The :: operator is not inert if used within a Boolean expression.

x::integerandx<3

true

(7)

Expressions involving the :: operator are of type `::`.

typex::symbol&comma;`::`

true

(8)

evalbx::string::`::`

true

(9)

Compatibility

• 

The ability to apply the :: operator to the control variable(s) of a for loop is new in Maple 2021.

• 

The :: operator was updated in Maple 2021.

See Also

boolean

evalb

if

parameter

procedure

while