Declare Function Example

An example which demonstrates the use of the func keyword.

Code in the body of the function has access to the same scope as a bound expression. This consists of an implicity self which resolves to the object on which the function was declared, as well as the identifiers declared in the enclosing enamldef block. It also has access to the dynamic scope which is rooted on self.

Tip

To see this example in action, download it from declare_function and run:

$ enaml-run declare_function.enaml

Screenshot

../_images/ex_declare_function.png

Example Enaml Code

#------------------------------------------------------------------------------
# Copyright (c) 2015, Nucleic Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file LICENSE, distributed with this software.
#------------------------------------------------------------------------------
""" An example which demonstrates the use of the `func` keyword.

Code in the body of the function has access to the same scope as a bound
expression. This consists of an implicity `self` which resolves to the
object on which the function was declared, as well as the identifiers
declared in the enclosing `enamldef` block. It also has access to the
dynamic scope which is rooted on `self`.

<< autodoc-me >>
"""
from __future__ import print_function
from collections.abc import Mapping
from enaml.widgets.api import Window, PushButton, SpinBox, Container
from enaml.core.funchelper import call_func


enamldef Main(Window): m:

    func do_thing(param):

        i = 0
        a = 1
        print({a: self for i in range(3)})
        print({m for m in range(1)})
        print([[i for i in range(1)] for i in range(2)])
        print([m for i in range(3) if i == m])
        print('Index', i)

    Container:
        SpinBox: sbox:
            maximum = 100
            minimum = 0
        PushButton:
            text = 'Click Me'
            clicked ::
                do_thing(1)
                print('Bis')
                print({a: self for i in range(3)})
                print({m for m in range(1)})
                print([[i for i in range(1)] for i in range(2)])
                print([m for i in range(3) if i == m])
                print('Index', i)