4 ms·
Since there are no exceptions, in a try-else how can you tell what the error was?
by ghosttie 8y ago
Since there are no exceptions, in a try-else how can you tell what the error was?
- spooneybarger 8y agoIf you need to distinguish between different errors than a union type like (Result | ErrorA | ErrorB) should be used.
- ghosttie 8y agoI mean like try if not x() then error end if not y() then error end else // which error happened? end
- spooneybarger 8y agoIf you need to distinguish between error then that would inappropriate. Without a real example, I can't really say what the right approach would be. Looking at your example, I would say, if you care about which error happened, you should be using separate try blocks. Errors aren't meant for flow control like that so really, you shouldn't be indicating error inside a try like that. One option that Pony could have gone with is to use union types to always indicate errors: (My Result | MyError) There's overhead to that though. You always have to match on the type. For situation where an error is unlikely, partial functions are nice. Partial functions are not exceptions though, and aren't designed to do flow control so trying to use like some might use exceptions (to do flow control) is going to be painful (as your example points out) because they weren't designed for that use case.
- ghosttie 8y agoHow about things like opening a file, where there could be a variety of reasons it could fail?
- spooneybarger 8y agoThis might be a better conversation for IRC (you can find me on Freenode in #ponylang as SeanTAllen) as we are replying to each other fast enough to trigger the flamewar detector. Now that it is letting me reply... You should use a union type for that situation. Note, the current File API in the Pony standard library doesn't do that and it's something that we intend to fix before version 1.0. At this point, now one has gotten frustrated enough with it to open an RFC to propose an updated API. Someone will at some point though. But... volunteer project, limited time, itch to scratch etc.
- deleted 8y ago[deleted]