gpt4 book ai didi

raku - 为什么默认的 Raku if/while/loop/when block 都具有相同的标识值 (.WHICH)?

转载 作者:行者123 更新时间:2023-12-04 04:14:30 26 4
gpt4 key购买 nike

除了我声明签名的 block 之外,所有 block 都具有相同的标识值,并且无论它们出现在哪里,都声称在第 1 行声明。任何人都可以阐明为什么会这样吗?

say 「Let's look at some blocks…」;

if True {
&?BLOCK.say;
}

while True {
&?BLOCK.say;
last;
}

loop {
&?BLOCK.say;
last;
}

if True -> | {
「I'm different!」.say;
&?BLOCK.say;
}

when ?True {
&?BLOCK.say;
}

最佳答案

首先:.say 不是 给你身份值,因为这会调用 .gist给定表达式的方法。对于标识值,您需要调用 .WHICH方法。幸运的是,Block.gist方法确实在其字符串化中包含标识值。但不能保证所有对象都是如此。

你在那里看到的是静态优化器在工作:因为 block 内没有发生任何事情,它可以被丢弃。在它不同的一种情况下(您指定了备用签名),它是不同的。如果您使用 --optimize=0 运行此脚本或 --optimize=1 ,那么所有 block 将具有不同的标识值。

我想您可以将其称为提及 &?BLOCK 的问题。不会阻止静态优化器展平范围。另一方面,您也可以将其称为 DIHWIDT(医生,我这样做时很痛)。所以不要那样做:-)

更新:是不同的签名造成了差异。丹尼尔·米塔++

关于raku - 为什么默认的 Raku if/while/loop/when block 都具有相同的标识值 (.WHICH)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58882287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com