raku - 如何死于未定义的值?

标签 raku

我试图在 Raku 中使用散列,但是当我(故意)将一些假值放入其中时,例如

say %key<fake_key>;
我得到(Any)但我希望程序在这种情况下死掉,就像 Perl 那样,因为这意味着丢失了重要的数据。
例如,
#!/usr/bin/env perl

use strict;
use warnings 'FATAL' => 'all';
use autodie ':all';

my %hash;
print "$hash{y}\n";
截至 5.26.1 产生
Use of uninitialized value $hash{"y"} in concatenation (.) or string at undefined.pl line 8.
Command exited with non-zero status 255
我怎样才能得到等效的 use warnings 'FATAL' => 'all'use autodie qw(:all)在乐?

最佳答案

你的问题是:

I'm looking for use autodie qw(:all) & use warnings 'FATAL' => 'all' in Raku


相当于 Perl 的 autodie在乐
Aiui 相当于 use autodie qw(:all)在 Perl 中是 use fatal;在乐。这是一个词法作用域(至少在 Raku 中是这样)。
The autodie section in the Perl-to-Raku nutshell guide解释例程现在返回 Failure s 表示错误。
The fatal pragma返回 Failure从例程自动抛出一个异常,其中包含 Failure .除非您提供捕获它们的代码,否则这些异常会包装 Failure s自动死亡。
相当于 Perl 的 use warnings 'FATAL'在乐
Aiui 相当于 use warnings 'FATAL' => 'all'在 Perl 中是 CONTROL { when CX::Warn { note $_; exit 1 } }在乐。这是一个词法作用域(至少在 Raku 中是这样)。
CONTROL exceptions解释了这些是如何工作的。CONTROL异常是所有异常的子集 .resume 'd 默认情况下——程序在被抛出时默认保持事件状态。
我提供的 Raku 代码(从您链接的 How could I make all warnings fatal? 中提取)改为 CONTROL异常死亡(由于 exit 例程)。
返回到您当前的问题文本:
say %key<fake_key>; # (Any)

I want the program to die in such occurrences ...


使用 Jonathan++ 的答案(使用 put ,与 say 不同,它不会试图让您的程序保持事件状态)或 Scimon++ 的 KeyRequired答案这将使访问不存在的 key 致命。

... as Perl does ...


仅当您使用 use warnings 'FATAL' ... ,就像 Raku 在使用等效项时所做的那样。

... because this implies that important data is missing.


通常它意味着丢失了不重要的数据,或者甚至是您在尝试访问它时不希望定义的重要数据,因此 Perls 和 Raku 默认保持您的程序处于事件状态,并要求您告诉它您想要什么,如果你想要不同的东西。
您可以使用上述结构来获得您想要的精确结果,它们将被限制在给定的变量(如果您使用 KeyRequired 角色)或语句(使用 put 而不是 say )或词法范围(使用编译指示或 CONTROL 块)。

关于raku - 如何死于未定义的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54312824/

相关文章:

raku - 我如何开始使用 Perl 6?

raku - Perl6 : how to sort `dir` results by directory age?

regex - 匹配一个连接点使得 Match 不可变

使用 fcntl 从 stdout 创建新文件描述符在文件中失败

tabs - perl6 如何获取所有未按空格的 x 宽度缩进的行?

mixins - 为混合角色的属性赋值

raku - 在接收器上下文中抛出的 block 的最后一个元素

raku - 从 Match 对象的 block 中获取可变字符串的方法?

redis - 请求输出时 Perl6 Redis 卡住了

bioinformatics - 使用 perl 6 计算 DNA 核苷酸