So I'd approach this in one of two ways. Firstly there's the multi sub with
constants option :

multi selector( "AbortRetryIgnore" ) { ... }
multi selector( "CancelRetryContinue" ) { ... }
multi selector( "Help" ) { ... }
multi selector( "YesNo" ) { ... }
multi selector( "Maybe" ) { ... }

I'd do this if each option is pretty different in what happens.

If on the other hand the way the options are handled pretty similar I'd go
with and Enum :

enum Option <AbortRetryIgnore CancelRetryContinue Help YesNo Maybe>;
subset OptStr of Str where { Options::{$_}:exists};

multi sub selector( OptStr $opt ) { callwith( Options::{$opt} ) }
multi sub selector( Option $opt ) { ... }

This lets us all the sub with with the Option enum value eg :
selector(YesNo) or the string variant (useful on the command line) eg :
selector("YesNo")

I'd do this if there's a lot of shared functionality in the selector sub.

Hope that helps.

You can combine the two options of course :)

enum Option <AbortRetryIgnore CancelRetryContinue Help YesNo Maybe>;
subset OptStr of Str where { Options::{$_}:exists};
multi sub selector( OptStr $opt ) { callwith( Options::{$opt} ) }

multi selector( AbortRetryIgnore ) { ... }
multi selector( CancelRetryContinue) { ... }
multi selector( Help ) { ... }
multi selector( YesNo ) { ... }
multi selector( Maybe ) { ... }

Simon


On Wed, 4 Dec 2019 at 08:45, ToddAndMargo via perl6-users <
perl6-us...@perl.org> wrote:

> Hi All,
>
> I am cooking up something where I want top pass a value to a sub, but I
> want to restrict what those values are.
>
> For instance, things like
>
>     AbortRetryIgnore
>     CancelRetryContinue
>     Help
>     YesNo
>     Maybe
>
> And so on and so forth.
>
> If the wrong value is passed, I want the checker to crash
> the sub.
>
> What is the best way of going about this?
>
> Many thanks,
> -T
>


-- 
Simon Proctor
Cognoscite aliquid novum cotidie

http://www.khanate.co.uk/

Reply via email to