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

Reply via email to