aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/examples/function_types.v
blob: fa924cb072da9c94a07d3c434b52880d30f1cd6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Function signatures can be declared as types:

type Filter = fn (string) string

// Functions can accept function types as arguments:

fn filter(s string, f Filter) string {
	return f(s)
}

// Declare a function with a matching signature:

fn uppercase(s string) string {
	return s.to_upper()
}

fn main() {
	// A function can be assigned to a matching type:

	my_filter := Filter(uppercase)

	// You don't strictly need the `Filter` cast - it's only used
	// here to illustrate how these types are compatible.

	// All of the following prints "HELLO WORLD":

	println(filter('Hello world', my_filter))
	println(filter('Hello world', uppercase))
	println(filter('Hello world', fn (s string) string {
		return s.to_upper()
	}))
}