ModularM
Modular3y ago
6 replies
Joel

Custom decorator

I am currently working on a custom mojo library, and i tried to implement a custom decorator so I could write less code. But while compilation an error ocurred, so I would like to ask:
Is it possible to implement custom decorators in Mojo and if yes, what is the syntax for that ?
Example Code (The code in my project is too long to mention here):
# 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])
Was this page helpful?