This immediately leave the proc when across something nil
    
    
    template safe(obj: typed, field: untyped): untyped =
      if obj.isNil:
        return
      `obj`.`field`
    
    
    type
      MyNullObj = ref object
        x: int
    
    proc main =
      var nullobj: MyNullObj
      var notnull = MyNullObj(x: 5)
      echo notnull.safe(x)
      echo "reach here"
      echo nullobj.safe(x)
    
    proc main2 =
      var nullobj: MyNullObj
      var notnull = MyNullObj(x: 5)
      echo nullobj.safe(x)
      echo "cannot reach here"
      echo notnull.safe(x)
    
    
    main2()
    main()
    
    
    Run

For proc that need to return something, have to set `result` in the function 
before hand, but `result` always has its default value so it's also ok

Reply via email to