On 28/02/2019 12:46, ToddAndMargo via perl6-users wrote:
Hi All,

https://docs.perl6.org/language/exceptions#Catching_exceptions

I am trying to place .payload into a variable `my $Payload = .payload;`


CATCH {
    # Reference:
https://docs.perl6.org/language/exceptions#Catching_exceptions
    my $NotifyStr;
    my $Payload = .payload;

    default {
       # $*ERR.say: .payload;
       PrintRedErr( "$Payload\n" );
       $NotifyStr = $Payload;
       for .backtrace.reverse {
          next if .file.starts-with('SETTING::');
          next unless .subname;
          # $*ERR.say: "  in block {.subname} at {.file} line {.line}";
          PrintRedErr( "  in block {.subname} at {.file} line
{.line}\n" );
       }
    }
    RunNoShell( "notify-send -u critical -t 0 -i \"$AlarmJpg\" \"CATCH
Trap \" \"$NotifyStr\"" );
}


But keep pulling the following error:

      No such method 'payload' for invocant of type
      'X::TypeCheck::Assignment' in block <unit>
      at ./GetUpdates.pl6 line 60

Line 60 is `my $Payload = .payload;`

What am I doing wrong?

Many thanks,
-T

On 2/28/19 7:27 AM, Timo Paulssen wrote:> As you can see from the routine page for "payload":
>
>      https://docs.perl6.org/routine/payload
>
> it only exists on X::AdHoc, which if you follow the link "from X::AdHoc"
> explains:
>
>      X::AdHoc is the type into which objects are wrapped if they are
> thrown as exceptions, but don't inherit from Exception.
>
> In your case you have a proper exception, i.e. the X::TypeCheck::Assignment
>
> In this case you'll probably want .message instead. .message on X::AdHoc
> will call .Str on the payload and return that, which is basically the
> same thing you wanted to do with the payload with
> PrintRedErr("$Payload\n") anyway. On top of that, every Exception object
> implements message.
>
> Hope that helps!
>    - Timo
>

Hi Timo,

That did the trick.  Thank you!

Did I just trip across a bug?

-T

Reply via email to