为了实现a
循环,我们使用函数WhatIsA()
计算了一个变量for。WhatIsA
的值在编译时是已知的,有没有什么我可以做的(也许是一个属性?),让编译器知道它可以擦除变量并将常量放在它所有引用的位置?
for (int i = 0; i < 1343434; i++)
{
int a = WhatIsA(); //retval of WhatIsA does not change after compilation, ever.
DoSomethingWithVariableA(a);
DooooSomethingWithVariableA(a);
DoooooooSomethingWithVariableA(a);
}
最初的问题来自Unity的环境。
private void Update()
{
LayerMask mask = LayerMask.GetMask("Terrarin");
CollidesBottom = Raycast((Vector2)transform.position + colliderBottomLeftOffset, Vector2.right, colliderWidth, mask);
CollidesTop = Raycast((Vector2)transform.position + colliderTopRightOffset, Vector2.left, colliderWidth, mask);
CollidesRight = Raycast((Vector2)transform.position + colliderTopRightOffset, Vector2.down, colliderHeight, mask);
CollidesLeft = Raycast((Vector2)transform.position + colliderBottomLeftOffset, Vector2.up, colliderHeight, mask);
}
GetMask
是众所周知的编译时,或者至少应该是编译时。编译器可能优化它,也可能不优化它。我自己唯一能做的事情可能是,将mask提升为一个字段变量,并在Start
函数中计算它,但是它的作用域比它需要的范围更大。
https://stackoverflow.com/questions/55169880
复制相似问题