| 1 | struct Seq[T] { |
| 2 | ar []T |
| 3 | } |
| 4 | |
| 5 | type MapFn[T, K] = fn (T) K |
| 6 | |
| 7 | fn (s Seq[T]) map[K](map_fn MapFn[T, K]) Seq[K] { |
| 8 | mut map_ar := []K{cap: s.ar.len} |
| 9 | |
| 10 | for _, i in s.ar { |
| 11 | map_ar << map_fn[T, K](i) |
| 12 | } |
| 13 | |
| 14 | return Seq[K]{map_ar} |
| 15 | } |
| 16 | |
| 17 | fn test_generics_method_chaining_call() { |
| 18 | s := Seq[string]{['one', 'two']} |
| 19 | .map[int](fn (element string) int { |
| 20 | match element { |
| 21 | 'one' { return 1 } |
| 22 | 'two' { return 2 } |
| 23 | else { return -1 } |
| 24 | } |
| 25 | }) |
| 26 | .map[int](fn (element int) int { |
| 27 | return element + 2 |
| 28 | }) |
| 29 | |
| 30 | println(s) |
| 31 | assert s.ar == [3, 4] |
| 32 | } |
| 33 | |