aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/examples/function_types.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/examples/function_types.v')
-rw-r--r--v_windows/v/examples/function_types.v32
1 files changed, 32 insertions, 0 deletions
diff --git a/v_windows/v/examples/function_types.v b/v_windows/v/examples/function_types.v
new file mode 100644
index 0000000..fa924cb
--- /dev/null
+++ b/v_windows/v/examples/function_types.v
@@ -0,0 +1,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()
+ }))
+}