Remove arg-highlight on calculate
[reinteract.git] / examples / build.rws
blob889b4e00933fbf0ebb2d4cdff9d2d3d79cb01944
1 # Reinteract generally sticks pretty close to standard Python,
2 # but the 'build' keyword is an exception. Sometimes you
3 # want to do multiple things "at once" as a single unit.
4 # The most common reason for doing this is that you are
5 # using an external module that doesn't support making
6 # copies of an object's state. You get the dreaded warning:
7 #  '<object>' apparently modified, but can't copy it
9 # A simple example of build:
11 build list() as l:
12     l.append(1)
13     l.append(2)
15 # As you can see from the above, build works a lot like
16 # Python's 'with' statement, but output's the named
17 # variable at the end of the block.
19 # We can also omit the initialization statement, and
20 # set the variable later in the block
22 build as l:
23     print l
24     l = list()
25     l.append(1)
26     l.append(2)
28 # or even omit everything and just use the build: to group
29 # a number of statements.
31 import reinteract.custom_result
32 build:
33     f = open(reinteract.custom_result.__file__)
34     lines = f.readlines()
35     count = len(lines)
36     f.close()
37 count
39 # Finally, we can omit the variable name.
41 build list():
42     pass
44 # This seems useless on the face of it, but the build statement
45 # optionally supports the same "context manager" protocol as the
46 # with statement, and this can be used to provide implicit
47 # context. (The reinteract author thinks that the first example
48 # in this file is the right way to do the following, but
49 # wanted to show off more complex possibilities.)
51 class build_list():
52     def __enter__(self):
53         from reinteract.statement import Statement
55         l = []
56         Statement.get_current()._list = l
57         return l
59     def __exit__(self, exception_type, exception_value, traceback):
60         from reinteract.statement import Statement
61         Statement.get_current()._list = None
63 def append(v):
64     from reinteract.statement import Statement
65     Statement.get_current()._list.append(v)
67 build build_list():
68     append(1)
69     append(2)