What type does byGrapheme() return?

Robert M. Münch robert.muench at saphirion.com
Sun Dec 29 09:23:21 UTC 2019

On 2019-12-27 17:54:28 +0000, Steven Schveighoffer said:

> This is the rub with ranges. You need to use typeof. There's no other 
> way to do it, because the type returned by byGrapheme depends on the 
> type of Range.

Hi, ok, thanks a lot and IMO these are the fundamental important 
information for people using D (beginners, causual programmers, etc.) 
to understand how things fit together.

> If you know what type Range is, it would be:
> struct S
> {
>     typeof(string.init.byGrapheme()) gText;
>     // or
>     alias GRange = typeof(string.init.byGrapheme());
>     GRange gText;
> }

Ah... I didn't know that I can use a basic type "string" combined with 
".init" to manually build the type. Neat...

> Subbing in whatever your real range for `string`. Or if it's the result 
> of a bunch of adapters, use the whole call chain with typeof.

Ok, and these are good candidates for alias definitions to avoid 
re-typing it many times.

> Why not just declare the real range type? Because it's going to be 
> ugly, especially if your underlying range is the result of other range 
> algorithms. And really, typeof is going to be the better mechanism, 
> even if it's not the best looking thing.

I think I got it... thanks a lot.

Robert M. Münch
smarter | better | faster

More information about the Digitalmars-d-learn mailing list