Background: I know many of you aren't working with Perl 6 and if you're not
interested, feel free to ignore :)
I'm working on Test.pm, the core Perl 6 testing module. I'm trying to get it
up to speed, including diagnostics. What follows is a tiny problem with &skip.
The skip multisub in Rakudo's Test.pm is defined like this:
multi sub skip() is export() { proclaim(1, "# SKIP"); }
multi sub skip($desc) is export() { proclaim(1, "# SKIP " ~ $desc); }
multi sub skip($count, $desc) is export() {
for 1..$count {
proclaim(1, "# SKIP " ~ $desc);
}
}
The
first is reasonable, but the second and third are awkward. We have
positional parameters whose position changes based upon the number of
arguments. We could do something like this:
multisub skip();
multisub skip(Int $count);
multisub skip(Str $desc);
multisub skip(Int $count, Str $desc);
However, that's going to break if $count is a string, right? Thought this
might work as a heuristic for that third definition:
# Won't get called unless the string has a non-digit in it
multisub skip( Str $desc where { $desc ~~ /\D/ } );
Thus, you could call this and it will still DWIM:
if $cond {
skip "3";
else {
# run three tests
}
Obviously, not having a description is bad, but so are straightjackets. Also,
I'm not comfortable with the heuristic nature of this.
I am thinking that the Perl 5 way may be better here. We have (effectively):
multisub skip(Str $desc);
multisub skip(Str $desc, Int $count);
Otherwise, we stick with named parameters, but that's a bit odd since every
other function exported uses positional parameters.
Thoughts?
Cheers,
Ovid
--
Buy the book - http://www.oreilly.com/catalog/perlhks/
Tech blog - http://use.perl.org/~Ovid/journal/
Twitter - http://twitter.com/OvidPerl
Official Perl 6 Wiki - http://www.perlfoundation.org/perl6