# defines a decorator extending a functions applicability from Integers to Vectors
# defines the decorator
fn extend_to_vec(func: fn(Int) capturing -> Int) -> fn(DynamicVector[Int]) capturing -> DynamicVector[Int]:
# defines the returned function
fn vecfunc(vec: DynamicVector[Int])-> DynamicVector[Int]:
# return vector
var val = DynamicVector[Int]()
# iterate over vector
for i in range(len(vec)):
# append result of Int function applied to the ith element of the vector
val.append(func(vec[i]))
return val
return vecfunc
# decorator applied to a function incrementing a value by one
@extend_to_vec
fn increment(i: Int) -> Int:
return i + 1
fn main():
# should produce an error, but doesn't
var i = 5
print(i)
i = increment(i)
print(i)
# shouldn't produce an error, but does
var vec = DynamicVector[Int]()
vec.append(1)
vec.append(2)
vec.append(3)
print(vec[0])
vec = increment(vec)
print(vec[0])
# defines a decorator extending a functions applicability from Integers to Vectors
# defines the decorator
fn extend_to_vec(func: fn(Int) capturing -> Int) -> fn(DynamicVector[Int]) capturing -> DynamicVector[Int]:
# defines the returned function
fn vecfunc(vec: DynamicVector[Int])-> DynamicVector[Int]:
# return vector
var val = DynamicVector[Int]()
# iterate over vector
for i in range(len(vec)):
# append result of Int function applied to the ith element of the vector
val.append(func(vec[i]))
return val
return vecfunc
# decorator applied to a function incrementing a value by one
@extend_to_vec
fn increment(i: Int) -> Int:
return i + 1
fn main():
# should produce an error, but doesn't
var i = 5
print(i)
i = increment(i)
print(i)
# shouldn't produce an error, but does
var vec = DynamicVector[Int]()
vec.append(1)
vec.append(2)
vec.append(3)
print(vec[0])
vec = increment(vec)
print(vec[0])