You overcomplicated it. This works:
    
    
    proc tap*[T](obj: T, code: proc(obj: T)): T =
      code obj
      obj
    
    let code = proc(i: int) =
      echo 2*i
    
    var num = 123
    echo num.tap(code)
    
    
    Run

To make it feel more like the Ruby version, you can use an anonymous proc:
    
    
    echo num.tap(proc(i: int) = echo 2 * i)
    
    
    Run

Reply via email to