On 12/08/2013 12:24 AM, seany wrote:

> std.algorithm.splitter seems to return all its return values as a type
> "Result", without quotes, and i dont not seem to be able to cast it to
> string[] or int[]  with cast(string[]) ( or even cast (string) - i tried
> that too).
>
> I tried to use a function
>
> void function(T, R)(T arr, out R output)
> {
>
> foreach(elem; arr)
> {
>      output ~= elemM
> }
> }
>
> i have an occasion where R is int[], and one where it is string[]; and
> but it says, that int can not be appended to string[], and string can
> not be appended to int[], and compilation fails.
>
> Nonetheless removing either of the occasions, solves it.
>
> how to deal with  this Result type?

Many other algorithms return Result, which are independent from each other. :) (Lookup "Voldemort types".)

Such types are just lazy ranges. When you eagerly need an actual array of the elements, call std.array.array on Result:

import std.array;
import std.algorithm;

void main()
{
    auto input = "hello world";
    auto splittedWords = input.splitter(' ').array;

    static assert(is (typeof(splittedWords) == string[]));
}

Ali

Reply via email to