vxx2 / vlib / v / checker / tests / option_fn_err.vv
73 lines · 61 sloc · 1.06 KB · 0c8ce3bcb9fd4a2e5bd5f991a5a07da976d780d7
Raw
1// use option without ? or an or block in places where it is not allowed
2
3fn foo() ? {
4 println('foo is called')
5}
6
7fn bar[T](v T) ?T {
8 return none
9}
10
11const const_value = bar(0)
12
13struct Data {
14 f fn (int) = unsafe { nil }
15mut:
16 value int = bar(0)
17 opt ?int = bar(0)
18}
19
20fn (mut v Data) add(n int) {
21 v.value += n
22}
23
24fn twice(n int) int {
25 return n * 2
26}
27
28fn main() {
29 // call fn
30 foo()
31 _ := bar(0)
32 println(twice(bar(0)))
33
34 // anon fn
35 fn (_ int) {}(bar(0))
36
37 // assert
38 assert bar(true)
39
40 // struct
41 mut v := Data{
42 f: fn (_ int) {}
43 value: bar(0)
44 opt: bar(0)
45 }
46 v.add(bar(0)) // call method
47 v.f(bar(0)) // call fn field
48
49 // array
50 mut arr := [1, 2]
51 arr << bar(0)
52 // init
53 _ := [bar(0)]
54 _ := []int{len: 1, init: bar(0)}
55 _ := [bar(0)]!
56 _ := [1]int{init: bar(0)}
57 // index
58 println(arr[bar(0)])
59 // array builtin methods
60 arr.insert(0, bar(0))
61 arr.prepend(bar(0))
62 arr.contains(bar(0))
63 arr.index(bar(0))
64 println(arr.map(bar(0)))
65 println(arr.filter(bar(true)))
66 println(arr.any(bar(true)))
67 println(arr.all(bar(true)))
68
69 match bar(0) {
70 0 {}
71 else {}
72 }
73}
74