The problem with `$files` is the `$`

When a `for` loop sees something that is itemized / containerized
(`$`) it treats it as a singular value.

    my @a = 1,2,3;
    my $a = @a;

    for @a { .say }
    # 1
    # 2
    # 3

    for $a { .say }
    # [1 2 3]

    for @a.item { .say }
    # [1 2 3]

To get it to not see the `$` you have to do something

    for $a.list {…}
    for @$a {…}

    for $a<> {…} # decontainerize
    for $a.sefl {…} # ditto

On Wed, Feb 13, 2019 at 6:30 AM Mikkel <mikkelst...@gmail.com> wrote:
>
> Hello. (recurring noob-question here)
>
> I seem always seem to get myself confused with Arrays/Typed Arrays. Can I ask 
> of you to explain why the 'for' loop does not work without .flat? It seems so 
> counter intuitive....
>
> > my Array[Str] $files;
> (Array[Str])
>
> > $files.push("Test");
> [Test]
>
> > $files.push("Test 2");
> [Test Test 2]
>
> > for $files -> Str $f {.say}
> Type check failed in binding to parameter '$f'; expected Str but got 
> Array[Str] (Array[Str].new("Test", "Test 2"))
>   in block <unit> at <unknown file> line 1
>
> Best regards
> Mikkel Birkedam

Reply via email to