33 lines
732 B
V
33 lines
732 B
V
|
// 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()
|
||
|
}))
|
||
|
}
|