raku - 为什么默认的 Raku if/while/loop/when 块都具有相同的标识值 (.WHICH)?
问题描述
除了我声明签名的块之外,所有块都具有相同的标识值,并且无论它们出现在哪里都声称在第 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
方法确实在其字符串化中包含了标识值。但不能保证所有对象都是如此。
你在那里看到的是静态优化器在工作:因为块内没有发生任何事情,它可以被丢弃。在它不同的一种情况下(您指定了备用签名),它是不同的。如果您使用--optimize=0
or运行此脚本--optimize=1
,则所有块将具有不同的标识值。
我想您可以将其称为一个问题,即提及&?BLOCK
不会抑制静态优化器使范围变平。另一方面,您也可以将其称为 DIHWIDT(医生,我这样做时很痛)。所以不要那样做:-)
更新:是不同的签名造成了差异。丹尼尔·米塔++
推荐阅读
- r - PCA 旋转缺少 PC1 列
- python - 运行本地服务器时找不到 django_heroku,部署的站点工作正常
- c# - File.Copy Throwing 抛出“文件名、目录名或卷标语法不正确”错误
- python - 如何让我的 python 窗口更美观?
- python - 'import matplotlib' 给出了 'module not found 错误'
- python - 查找二进制边缘图像中的闭合循环数
- flutter - 有没有办法控制 Flutter 中 NavigationRail 的前导元素行为?
- python - 查找具有共同价值观的列表
- c# - 如何测试一个值是否不等于任何有效选择
- ksqldb - ksqlDB 没有正确使用 rowkey