const Interface = struct { // can call directly: iface.pickFn(iface) pickFn: fn (*Interface) i32, // allows calling: iface.pick() pub fn pick(iface: *Interface) i32 { return iface.pickFn(iface); } }; We could have gotten away with just the function pointer pickFn, but that would mean the usage code would have to call it iface.pickFn(iface), repeating the interface pointer. Adding pub fn pick makes