var ResultTrait={ Ok:func(val){ me.ok=val; me.flag=0; return me; }, Err:func(info){ me.err=info; me.flag=1; return me; }, unwrap:func(){ if(me.flag) die(me.err); return me.ok; } }; var Result=func(){ return{ ok:nil, err:"", flag:1, parents:[ResultTrait] }; }; var a=func(){ return Result().Ok("hello world"); } var b=func(){ return Result().Err("exception test"); } println(a().unwrap()); b().unwrap();