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