On 07/09/2012 02:24 AM, monarch_dodra wrote:
> On Monday, 2 July 2012 at 12:44:59 UTC, monarch_dodra wrote:
>> ...
>
> I opened this thread a week ago, and got little no feed back.

Please also consider the D.learn newsgroup. Some people are more responsive over there. :) (And you may have already asked there anyway. :))

> import std.stdio;
> import std.algorithm;
> import std.container;
>
> void main()
> {
> Array!int arr = Array!int(1, 2, 3, 4, 5);
> foreach(ref a; arr[])
> {
> a = 10;
> }
> writeln("Output: ", arr[]);
> }
> ----
> Output: [1, 2, 3, 4, 5]
> ----

Yet using the InputRange functions directly works:

    Array!int arr = Array!int(1, 2, 3, 4, 5);
    auto all = arr[];

    for ( ; !all.empty; all.popFront()) {
        all.front = 10;
    }

Now, the output: [10, 10, 10, 10, 10]

Using for and indexes also works:

    Array!int arr = Array!int(1, 2, 3, 4, 5);
    auto all = arr[];

    for (auto i = 0; i != all.length; ++i) {
        all[i] = 10;
    }

Again, the output: [10, 10, 10, 10, 10]

> I realize I'm still new to D, but I'd appreciate if somebody told me if
> I am wrong(or being stupid).

I have found std.container to be confusing.

> Anyways, I'm bothered by several things:
>
> Quoteth "The D programing language", 12.9.1: "If you specify ref with
> value, the compiler replaces all uses of value with calls to __c.front
> throughout the body of the loop".
>
> Surely, there is something wrong here... right?

Yes. :)

Ali

Reply via email to