# New Ticket Created by mt1957
# Please include the string: [perl #126462]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=126462 >
Two samples of code for which the problem is closely related
The first problem;
return MongoDB::Cursor.new(
collection => self,
OP_REPLY => $OP_REPLY,
criteria => %@criteria
);
Generates the error; 'Default constructor for 'MongoDB::Cursor' only
takes named arguments'
The second problem;
return self.find-and-modify(
$criteria, $projection, :$remove, :$update, :$sort,
:$new, :$upsert
);
Generates: 'Too many positionals passed; expected 1 to 3 arguments but
got 8'
The different errors are caused by the order of testing steps done by
perl6. The named arguments are converted to or seen as positionals in
some way when it is used together with the return statement.
To make it work I had to resort to the following.
my $c = MongoDB::Cursor.new(
collection => self,
OP_REPLY => $OP_REPLY,
criteria => %@criteria
);
return $c;
and for the second the same way
my $h = self.find-and-modify(
$criteria, $projection, :$remove, :$update, :$sort,
:$new, :$upsert
);
return $h;
perl6 version 2015.09-346-g0251b52 built on MoarVM version
2015.09-74-gedc44b5