1 |
# tea functions
|
2 |
|
3 |
|
4 |
shopt -s oil:all
|
5 |
shopt -s parse_tea
|
6 |
|
7 |
var mylist = [1,2,3]
|
8 |
func f() {
|
9 |
return mylist
|
10 |
}
|
11 |
setvar f()[2] = 42
|
12 |
write @mylist
|
13 |
## STDOUT:
|
14 |
1
|
15 |
2
|
16 |
42
|
17 |
## END
|
18 |
|
19 |
|
20 |
shopt -s oil:all
|
21 |
shopt -s parse_tea
|
22 |
|
23 |
func add(x, y) Int {
|
24 |
echo 'hi'
|
25 |
return x + y
|
26 |
}
|
27 |
var result = add(42, 1)
|
28 |
echo $result
|
29 |
## STDOUT:
|
30 |
hi
|
31 |
43
|
32 |
## END
|
33 |
|
34 |
|
35 |
shopt -s oil:all
|
36 |
shopt -s parse_tea
|
37 |
|
38 |
func add(x Int, y Int) Int {
|
39 |
echo 'hi'
|
40 |
return x+y
|
41 |
}
|
42 |
var result = add(42, 1)
|
43 |
echo $result
|
44 |
## STDOUT:
|
45 |
hi
|
46 |
43
|
47 |
## END
|
48 |
|
49 |
|
50 |
shopt -s oil:all
|
51 |
shopt -s parse_tea
|
52 |
|
53 |
func add(x Int, y=1, z=1+2*3) {
|
54 |
return x + y + z
|
55 |
}
|
56 |
echo $[add(3)]
|
57 |
echo $[add(3,4)]
|
58 |
## STDOUT:
|
59 |
11
|
60 |
14
|
61 |
## END
|
62 |
|
63 |
|
64 |
shopt -s oil:all
|
65 |
shopt -s parse_tea
|
66 |
|
67 |
func add(x, y) {
|
68 |
return x + y
|
69 |
}
|
70 |
var f = add(1,2)
|
71 |
echo f=$f
|
72 |
var f = add(1,2,3)
|
73 |
echo $f
|
74 |
## status: 1
|
75 |
## STDOUT:
|
76 |
f=3
|
77 |
## END
|
78 |
|
79 |
|
80 |
shopt -s oil:all
|
81 |
shopt -s parse_tea
|
82 |
|
83 |
func add(x, y, ...args) {
|
84 |
pp cell ':args' # This works in Tea too for debugging
|
85 |
return x + y
|
86 |
}
|
87 |
var args = %[5 6 7 8]
|
88 |
var y = add(...args)
|
89 |
echo y=$y
|
90 |
## STDOUT:
|
91 |
7
|
92 |
8
|
93 |
y=11
|
94 |
## END
|
95 |
|
96 |
|
97 |
shopt -s oil:all
|
98 |
shopt -s parse_tea
|
99 |
|
100 |
func f(; x=42) {
|
101 |
echo $x
|
102 |
}
|
103 |
_ f()
|
104 |
_ f(x=99)
|
105 |
## STDOUT:
|
106 |
42
|
107 |
99
|
108 |
## END
|
109 |
|
110 |
|
111 |
shopt -s oil:all
|
112 |
shopt -s parse_tea
|
113 |
|
114 |
func add(x Int, y Int ; verbose Bool) {
|
115 |
if (verbose) {
|
116 |
echo 'verbose'
|
117 |
}
|
118 |
return x + y
|
119 |
}
|
120 |
var a = add(3, 2, verbose=true)
|
121 |
echo $a
|
122 |
|
123 |
# crashes
|
124 |
var a = add(3, 2)
|
125 |
echo "shouldn't get here"
|
126 |
## status: 1
|
127 |
## STDOUT:
|
128 |
verbose
|
129 |
5
|
130 |
## END
|
131 |
|
132 |
|
133 |
shopt -s oil:all
|
134 |
shopt -s parse_tea
|
135 |
|
136 |
func add(x, y) {
|
137 |
return x + y
|
138 |
}
|
139 |
var x = add(2, 3)
|
140 |
echo x=$x
|
141 |
var y = add(2, 3, verbose=true)
|
142 |
|
143 |
## status: 1
|
144 |
## STDOUT:
|
145 |
x=5
|
146 |
## END
|
147 |
|
148 |
|
149 |
|
150 |
shopt -s oil:all
|
151 |
shopt -s parse_tea
|
152 |
|
153 |
func add(x, y; verbose=true, ...named) {
|
154 |
if (verbose) { echo 'verbose' }
|
155 |
|
156 |
# Can list splatting work in tea? Maybe it should be
|
157 |
# x = splice(named)
|
158 |
# pp cell 'x'
|
159 |
# Or just
|
160 |
# = named
|
161 |
# = splice(named)
|
162 |
write @named | sort
|
163 |
return x + y
|
164 |
}
|
165 |
var args = {verbose: false, a: 1, b: 2}
|
166 |
var args2 = {f: 3}
|
167 |
var ret = add(2, 3; ...args, ...args2)
|
168 |
echo ret=$ret
|
169 |
## STDOUT:
|
170 |
a
|
171 |
b
|
172 |
f
|
173 |
ret=5
|
174 |
## END
|
175 |
|
176 |
|
177 |
shopt -s oil:all
|
178 |
shopt -s parse_tea
|
179 |
|
180 |
func printf(fmt, ...args) {
|
181 |
= fmt
|
182 |
# Should be a LIST
|
183 |
= args
|
184 |
}
|
185 |
_ printf('foo', 'a', 42, null)
|
186 |
|
187 |
## STDOUT:
|
188 |
(Str) 'foo'
|
189 |
(Tuple) ('a', 42, None)
|
190 |
## END
|
191 |
|
192 |
|
193 |
shopt -s parse_tea
|
194 |
|
195 |
func f(x) {
|
196 |
return x + 2*3
|
197 |
}
|
198 |
# this goes in proc
|
199 |
f() {
|
200 |
local x=42
|
201 |
return $x
|
202 |
}
|
203 |
var x = f(36)
|
204 |
echo x=$x
|
205 |
f
|
206 |
echo status=$?
|
207 |
## STDOUT:
|
208 |
x=42
|
209 |
status=42
|
210 |
## END
|
211 |
|
212 |
|
213 |
shopt -s oil:all
|
214 |
|
215 |
func f(a, b=0, ...args; c, d=0, ...named) {
|
216 |
write __ args: @args
|
217 |
write __ named:
|
218 |
write @named | sort
|
219 |
if (named) {
|
220 |
return [a, b, c, d]
|
221 |
} else {
|
222 |
return a + b + c + d
|
223 |
}
|
224 |
}
|
225 |
var a = [42, 43]
|
226 |
var n = %{x: 99, y: 100}
|
227 |
|
228 |
echo ____
|
229 |
write string $[f(0, 1, ...a, c=2, d=3)]
|
230 |
|
231 |
# Now get a list back
|
232 |
echo ____
|
233 |
write array @[f(5, 6, ...a, c=7, d=8; ...n)]
|
234 |
|
235 |
## STDOUT:
|
236 |
____
|
237 |
__
|
238 |
args:
|
239 |
42
|
240 |
43
|
241 |
__
|
242 |
named:
|
243 |
|
244 |
string
|
245 |
6
|
246 |
____
|
247 |
__
|
248 |
args:
|
249 |
42
|
250 |
43
|
251 |
__
|
252 |
named:
|
253 |
x
|
254 |
y
|
255 |
array
|
256 |
5
|
257 |
6
|
258 |
7
|
259 |
8
|
260 |
## END
|
261 |
|
262 |
|
263 |
var f = |x| x+1
|
264 |
var y = f(0)
|
265 |
echo $y
|
266 |
echo $[f(42)]
|
267 |
## STDOUT:
|
268 |
1
|
269 |
43
|
270 |
## END
|
271 |
|
272 |
|
273 |
shopt -s oil:all
|
274 |
shopt -s parse_tea
|
275 |
|
276 |
# I think we should disallow these.
|
277 |
# The bug is related to return as a keyword!!! Which we will get rid of in the
|
278 |
# newer Tea parser.
|
279 |
|
280 |
func returnsString() {
|
281 |
func unrelated() {return "hm?"}
|
282 |
return "test" # This fails
|
283 |
}
|
284 |
|
285 |
= returnsString()
|
286 |
|
287 |
## STDOUT:
|
288 |
## END
|