On Sun, 27 Oct 2002 [EMAIL PROTECTED] wrote:
: Damian Conway wrote:
: : > or
: : >
: : > given ( "/home/temp/", $f )
: : > -> ( str $x , int $n ) {
: : > $x ~ ["one, "two", ... , "hundreed"][$n]
: : > };
: : >
: : > it seems that the last does not work because given take only one argument.
: :
: : That's right. But this does:
: :
: : for "/home/temp/", $f
: : -> str $x , int $n {
: : $x ~ ["one, "two", ... , "hundreed"][$n]
: : }
: :
: : Damian
:
: except that it will not tolerate list in block signature
:
: for "/home/temp/", @f
: -> str $x , int @y {
: ...
: }
:
: am I right ?
"for" is special in that it provides a list context to its, er,
list, while looking for scalars in the signature to map it against.
So the problem with that example is not the signature, which nicely
specifies a scalar reference to an array, but that the list context
would naturally flatten @f. You'd have to pass it as \@f, unless
you actually mean @f to contain a list mapping to:
(Array of int, (str, Array of int) is repeated).
: Now it will be
:
: given ["/home/temp/", @f ]
: -> [ str $x , int @y ]{
: ...
: }
:
: ?
Though that doesn't iterate like "for" can:
for "/home/temp/", \@f,
"/home/notsotemp", \@g,
-> str $x , int @y {
...
}
Larry