Может ли Perl 6 принять позиционный параметр, который не является первым?
Perl 6 позволяет выполнять подпрограммы с помощью . при условии. Это легко сделать, если вы хотите взять на себя ведущие позиционные параметры:
# The first one
{
sub first-and-last ( $first, $last ) {
say "Name is $first $last";
}
my &joe = &first-and-last.assuming( 'Joe' );
&joe.( 'Jones' );
}
Но что, если я хочу принять один из других позиционных параметров, оставив только одни? Как я могу сказать .assuming
, какие параметры следует принимать?
# The second one
try {
sub first-and-last ( $first, $last ) {
say "Name is $first $last";
}
my &smith = &first-and-last.assuming( Empty, 'Smith' );
&smith.( 'Joe' );
}
С именованными параметрами это прямолинейно, но это не то, что мне интересно.
Если это действительно просто EVAL внизу, это своего рода разочарование.
Ответы
Ответ 1
Huh, Whatever работает:
sub first-and-last ( $first, $last ) {
say "Name is $first $last";
}
my &smith = &first-and-last.assuming( *, 'Smith' );
&smith.( 'Joe' );
И вы можете обрабатывать средние параметры:
sub longer-names ( $first, $middle, $last, $suffix ) {
say "Name is $first $middle $last $suffix";
}
my &smith = &longer-names.assuming( *, *, 'Public', * );
&smith.( 'Joe', 'Q.', 'Jr.');