在 2008-4 的 Google PR 的更新里我的 Blog 已经上升为7了。
在这里感谢大家对我的支持。
再请大家多多关注一下我的另一个 Blog —— ActionScript Snippets - 一个专门收集 AS 代码的 Blog,它的 PR 也上升为了3。
Beyond the World, synchronize with the Universe.
在 2008-4 的 Google PR 的更新里我的 Blog 已经上升为7了。
在这里感谢大家对我的支持。
再请大家多多关注一下我的另一个 Blog —— ActionScript Snippets - 一个专门收集 AS 代码的 Blog,它的 PR 也上升为了3。
重要度:(3/5) 这个问题看似简单,但 debug 时却难以发现。
数组访问时如果下标使用了函数并且使用了 +=
、-=
、*=
等运算符时需要特别地注意,函数会被调用两次!
比如以下代码:
var i:int = 0; var foo = function():int { trace("foo"); return ++i; } var arr:Array = [1,2,3]; arr[foo()] += 10; trace(arr);
将会输出:
foo; foo; 1,13,3
而正确的输出为:
foo; 1,12,3
这是因为在编译时编译器只做了一下简单的操作:
(a += b) --> (a) = (a) + (b)
以至于将 arr[foo()] += 10;
编译成 arr[foo()] = arr[foo()] + 10;
。
PS:因为最近很忙,好久没有更新 Blog 了。
最近发现了一个 mxmlc 编译器的 BUG,当含有 -(true ? 1 : 0)
的代码编译会出错。
比如以下代码:
package {
import flash.display.Sprite;
public class TestBUG extends Sprite {
public function TestBUG() {
trace('Test');
var foo:Number = -(true ? 1 : 0);
}
}
}
使用 mxmlc 编译时会弹出错误:
Error: null java.lang.NullPointerException at macromedia.asc.semantics.ConstantEvaluator.evaluate(ConstantEvaluator.java:1168) at macromedia.asc.parser.UnaryExpressionNode.evaluate(UnaryExpressionNode.java:33) at macromedia.asc.semantics.ConstantEvaluator.evaluate(ConstantEvaluator.java:1805) ......
但把 -(true ? 1 : 0)
的 -
号去掉后编译却可以正常进行,真奇怪!
This work is licensed under a
Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
详细请参照版本声明
欢迎使用任何 RSS 阅读器订阅本 Blog 最新文章
通过电子邮件订阅: