Wiki

Introduction to Type Inference

Although you can explicitly declare the type of a local variable, you don't have to:

# the long way:
i as int = 0

# the short, easy way:
i = 0

The type of the variable on the left is taken to be the type of the expression on the right.

This also works for object variables:

class Person

    var _name = ''  # typed as String
    var _age = 0    # typed as int

If the inferred type is not suitable, perhaps because you need a more general type, you can provide one explicitly or even typecast the right-hand side:

class Person

    var _name = '' to dynamic
    var _age as int64 = 0

    def foo
        i = 0 to int64
        j as int64 = 0

Sometimes you want the variable to be typed as a base class because you may assign other things to it in the future:

    shape = Circle() to Shape

    share as Shape = Circle()

Generics

Type inference also occurs for the types of generic lists, sets and dictionaries:

    names = ['foo', 'bar']  # List<of String>
    numbers = {1, 2, 3}     # Set<of int>
    shapes = {'circle': Circle(), 'square': Square()}  # Dictionary<of String, Shape>

If Expressions

If-expressions are typed based on their two possible expression results:

TODO

Greatest Common Denominator

TODO

See Also

See also: TypesOverview, LanguageTopics