raku - 通过 CALL-ME 清除沉没的电话
问题描述
在尝试提出沉没上下文中的地图示例时,我遇到了以下代码:
my $a = -> { 42 };
my $b = -> { "foo" };
$a;
$a();
($a,$b).map: { $_ };
第一次调用 $a 本身返回:
WARNINGS for /home/jmerelo/Code/raku/my-raku-examples/sunk-map.p6:
Useless use of $a in sink context (line 6)
但是,将 .() 或 () 放在后面,或者在地图中使用它们(我认为它是)接收器上下文不会导致任何警告。可能它不是接收器上下文,但我想知道为什么。
解决方案
$a;
$a();
($a,$b).foo ...
$a
自己第一次调用
那不是“电话”。这只是提到它又名“使用”。(注意:这个,呃,使用“use”与语句use
中的关键字无关。)use
/home/jmerelo/Code/raku/my-raku-examples/sunk-map.p6 的警告:在接收器上下文中无用地使用 $a(第 6 行)
正确的。只是这样提是没有用的。您不会对( 已分配函数)的值做任何事情。$a
你只是把它扔在地板上。
但是,在地图中放置
.()
或()
落后,或在(我认为它是)接收器上下文中使用它们不会导致任何警告。
正确的。这些原因.CALL-ME
在他们的左侧被调用。无论代码是否使用调用返回的任何值,这些都被理解为可能有用。因此,尽管处于接收器上下文中,但没有警告(尽管接收器上下文本身可能依赖于上下文,并且在编译器级别,它们甚至不被视为处于接收器上下文中;我不知道)。
推荐阅读
- python - 如何在 django 中按类别过滤
- android-studio - Android Studio 突出显示代码红色且没有错误(Gradle 4.0.0 错误)
- excel - 尝试从 Excel 中的 Google 表格复制“IMAGE()”函数
- php - 试图获取非对象的属性 [LARAVEL]
- java - 如何按降序对 TreeMap 值进行排序以及如何限制输出?
- sql - Oracle SQL XML 提取
- google-cloud-storage - 如何在批量存储 json api 中使用 rewriteToken?
- react-spring - react-use-gesture + spring - 从手势识别中排除嵌套元素
- python - 用于小型计算的 Python 可扩展并行处理
- javascript - TypeScript 编译器是否存在关于泛型的错误,或者我遗漏了什么?