I’m pretty sure it’s parsed as acme?(nil).try(&.slot) * 2. If you want to do something with the return value of .slot in the context of the try, you can’t use the shorthand syntax.
No, that’s the same thing you had before, just with somewhat more explicit (). It’ll suffer from the same problem if you pass nil instead of gizmo. The compiler I guess can prove that the return value from #acme? won’t be nil in this case, so it just works.
If you want it to work all the time, you’ll need to do the long form like the first two calls in the OP.