On Thu, 2004-05-06 at 02:36, Dov Wasserman wrote:
> After the New And Improved logError() routine is rolled out, it seems to me
> that this log statement should generate a compile-time error, since the
> named Int parameter "prio" is given a non-integer argument "HIGH". At best,
> this should be a run-time error. Either way, this confusion undermines a key
> Perl strength: ability of the user to upgrade code (without breaking it).
I strongly disagree. this fact has nothing to do with Perl itself, but
with how you decide to use it. you said "Int +$prio" because you
*wanted* code to break when "prio" is not an integer. 

we have to cope with new (and greater) strenghts in Perl6, and one of
these is: "it's fine for Perl to have a type system as long as it's
optional" (cit. A6).

if you upgrade your code to do type-checking, it obviously fails  when
type constraints are violated. but you don't have to. you could have
said:

sub logError($msg, +$prio = 4, *%errorInfo) {
    # ...
    my Str $prio_desc = getPrioDescription($prio) // $prio;
    print "$prio_desc: $s.\n";
}

or even:

    my Str $prio_desc = $prio;
    if $prio.isa(Int) {
        $prio_desc = getPrioDescription($prio);
    }

cheers,
Aldo

Reply via email to