作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
除了我声明签名的 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/
我是一名优秀的程序员,十分优秀!