用一个代码片段
perl6 -e 'loop { FIRST say "foo"; last }'
Run Code Online (Sandbox Code Playgroud)
我明白了
WARNINGS for -e:
Useless use of LOOP_BLOCK_1 symbol in sink context (line 1)
foo
Run Code Online (Sandbox Code Playgroud)
我知道如何解决警告.我想知道警告的来源是什么.我发现这张门票,但似乎没有得到任何关注.
这个警告是关于什么的?
那怎么回事呢?
$ perl6 --version
This is Rakudo version 2018.06 built on MoarVM version 2018.06
implementing Perl 6.c.
Run Code Online (Sandbox Code Playgroud)
这是一个错误,一个虚假的警告.
我知道如何解决警告.
这是主要的事情.
我想知道警告的来源是什么.
这是编译器的一个虚假警告.
我发现这张门票,但似乎没有得到任何关注.
我认为它受到了一些关注.
提交错误的bbkr与另一个显示其解决方法的错误相关联.(它不是添加do而是删除FIRST相位器并将相关语句放在循环之外.)
如果你按照bbkr原始bug中的其他链接,你会得到另一个错误,解释一般的"不需要"机制需要清理.我想可用的圆形调整专注于更大的鱼类,例如这种整体机制.
希望你能看到它只是一个奇怪的警告信息,并在更大的方案中产生轻微的滋扰.如果在循环结构中使用FIRST相位器,似乎会出现.这是非常明显的工作,你可能知道和bbkr显示.
这个警告是关于什么的?
许多语言允许您混合使用过程和功能范例.程序代码运行其副作用.结果的功能代码.一些构造可以做到这两点.
但是,如果你使用通常与其结果的意图一起使用的构造,并且编译器知道这一点,但它也知道它已被用于其值将被忽略的上下文中,该怎么办?
Perls将此称为"在汇集环境中无用的使用......"并且通常会警告编码人员.("sink"是其他语言文化中通常称为"无效"语境的替代/传统术语.)
此错误消息是这些警告之一,尽管是一个虚假的警告.
那怎么回事呢?
没有.
相关的编译器警告机制已经混淆了.
消息中"无用的使用...在接收器上下文中"部分是通用的,并且希望不言自明.
但是它不应该像"LOOP_BLOCK_1符号"这样说.这是内部的笨蛋.
这是一个警告信息错误.