How to hide a function return type in order to wrap several functions into an associated array?
Paul Backus
snarwin at gmail.com
Sun Sep 27 20:03:21 UTC 2020
On Sunday, 27 September 2020 at 18:54:11 UTC, tastyminerals wrote:
> This is rather a generic implementation question not
> necessarily related to D but I'd like to get some opinions.
> I have a collection of functions that all have the same input,
> a string. The output however is different and depending on what
> the function does it can be ulong, double or bool. The problem
> is that for each line of text I'd like to apply all these
> functions, collect the results and write them into some file.
> For example,
>
> [...]
>
> As you can see, I created a templated Feature struct. This does
> not help much because I also want to create an associative
> array of ["functionName": &numberOfPunctChars]. How can I
> define such an array when "Feature!T function(string)[string]
> allFuns" requires defining T beforehand and using auto is not
> possible?
>
> I was thinking of having a Feature struct with 3 fiels of
> ulong, double and bool members but then each Feature init would
> look ugly imho "Feature("name", null, 1.5, null)". There should
> be a another way.
You can use an Algebraic [1] or SumType [2] for this:
alias Feature = SumType!(ulong, double, bool);
Feature numberOfPunctChars(string text)
{
// ...
return Feature(cnt);
}
Feature ratioOfDigitsToChars(string text)
{
// ...
return Feature(ratio);
}
Feature hasUnbalancedParens(string text)
{
// ...
return Feature(!isBalanced);
}
[1]
http://dpldocs.info/experimental-docs/std.variant.Algebraic.html
[2] https://code.dlang.org/packages/sumtype
More information about the Digitalmars-d-learn
mailing list