带有类似
的代码段perl6 -e 'loop { FIRST say "foo"; last }'
我知道
WARNINGS for -e:
Useless use of LOOP_BLOCK_1 symbol in sink context (line 1)
foo
我知道如何解决警告。我想知道警告的来源是什么。我找到了this open ticket,但似乎没有受到任何关注。
这是什么警告?
那这没用吗?
$ perl6 --version
This is Rakudo version 2018.06 built on MoarVM version 2018.06
implementing Perl 6.c.
答案 0 :(得分:5)
这是一个错误,一个虚假的警告。
我知道如何解决警告。
那是主要的事情。
我想知道警告的来源是什么。
这是来自编译器的虚假警告。
我找到了这张公开票,但似乎没有受到任何关注。
我认为它引起了人们的注意。
提交该错误的 bbkr与另一个错误相关联,他们在其中显示了解决方法。 (它不是添加do
,而是删除FIRST
移相器,并将关联的语句放在循环之前。)
如果您遵循bbkr原始错误中的其他链接,您将看到另一个错误,解释了一般的“有害”机制需要清除。我想象可用的round tuits专注于更大的鱼类,例如这种总体机制。
希望您能看到,这只是一个奇怪的警告信息,对于更大的事情来说只是一个小小的麻烦。如果在循环结构中使用FIRST移相器,它似乎会出现。您大概知道并且bbkr展示了它周围非常明显的工作。
这是什么警告?
许多语言允许您混合过程和功能范例。运行过程代码是有副作用的。其结果的功能代码。某些构造可以同时做到。
但是,如果您使用通常使用其构造意图的构造,并且编译器知道这一点,但它也知道它已在会忽略其值的上下文中使用,怎么办?
Perls称其为“在接收器上下文中对...的无用使用”,通常会向编码器发出警告。 (“水槽”是其他语言文化中通常称为“无效”上下文的替代/传统术语。)
此错误消息是这些警告之一,尽管是虚假的警告。
那这没用吗?
没事。
相关的编译器警告机制变得混乱。
消息的“在接收器上下文中无用...”部分是通用的,希望可以不言自明。
但是绝对不能说“ LOOP_BLOCK_1符号”之类的话。那是内部的庞然大物。
这是一个警告消息错误。