I'm trying to filter data with implicit lambda parameter, but still not lucky import macros type Person = object name: string age: int macro createVar(varName: string, value: untyped): untyped = let newVar = ident(varName.strVal) # create the new identifier from varName result = quote do: let `newVar` {.inject.} = `value` template createAllVar(it: untyped): untyped = for k, v in fieldPairs it : createVar(k, v) template filter(s, pred: untyped): untyped = var result = newSeq[typeof(s[0])]() for it {.inject.} in items(s): createAllVar it if pred: result.add(it) result let people = @[ Person(name: "wk", age: 20), Person(name: "jw", age: 22)] let rs = filter(people, age > 20 and name == "jw") echo rs Run
Error /Users/wk/Source/nim-syntax/concept/ImplicitLambaParameter.nim(10, 12) Hint: 'name' is declared but not used [XDeclaredButNotUsed] /Users/wk/Source/nim-syntax/concept/ImplicitLambaParameter.nim(10, 12) Hint: 'age' is declared but not used [XDeclaredButNotUsed] /Users/wk/Source/nim-syntax/concept/ImplicitLambaParameter.nim(25, 25) Error: undeclared identifier: 'age' Run