v2 / vlib / v / tests / generics / generic_struct_fn_field_closure_test.v
24 lines · 22 sloc · 375 bytes · 84637a32ff9141423eef2e3192908abf92b05eb5
Raw
1struct Foo[U] {
2 f fn (string) U @[required]
3}
4
5fn map_foo[T, U](f Foo[T], m fn (T) U) Foo[U] {
6 return Foo[U]{
7 f: fn [f, m] [U](s string) U {
8 v := f.f(s)
9 return m(v)
10 }
11 }
12}
13
14fn test_generic_struct_fn_field_closure() {
15 f := Foo[string]{
16 f: fn (s string) string {
17 return s
18 }
19 }
20 v := map_foo(f, fn (_ string) int {
21 return -1
22 })
23 assert v.f('foo') == -1
24}
25