While trying to come up with an example of maps in sunk context, I bumped into this code:
my $a = -> { 42 };
my $b = -> { "foo" };
$a;
$a();
($a,$b).map: { $_ };
Run Code Online (Sandbox Code Playgroud)
The first call to $a by itself returns:
WARNINGS for /home/jmerelo/Code/raku/my-raku-examples/sunk-map.p6:
Useless use of $a in sink context (line 6)
Run Code Online (Sandbox Code Playgroud)
However, putting .() or () behind, or using them in (what I though it was) sink context in a map didn't result in any warning. Probably it's not sink context, but I would like to know why.
$a;
$a();
($a,$b).foo ...
Run Code Online (Sandbox Code Playgroud)
第一次调用
$a本身
这不是“召唤”。这只是提到它又名“使用”。(注:这个,呃,使用“使用”无关用关键字use在use声明。)
/home/jmerelo/Code/raku/my-raku-examples/sunk-map.p6 的警告:在接收器上下文中无用地使用 $a(第 6 行)
对。就这么提是没用的。您不会对(已分配函数)的值执行任何操作$a。你只要把它放在地板上。
但是,在地图中的接收器上下文中放置
.()或放置或()使用它们(我认为它是)不会导致任何警告。
对。那些.CALL-ME在他们的左手边被调用的原因。无论代码是否使用调用返回的任何值,这些都被理解为潜在有用。因此,尽管处于接收器上下文中,但没有警告(尽管接收器上下文本身可能依赖于上下文,并且在编译器级别,它们甚至不被视为处于接收器上下文中;我不知道)。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |