我有以下代码。使用allShaders.forEach
的清洁版本无法正常工作,因此这是暂时的;那是一个不同的问题。
static loadAndCompileAll(Function onLoad, Function onFail) {
Function functionQueue = () { onLoad(); };
for (int i=0; i < allShaders.length; ++i){
Shader s = allShaders[i];
Function previous = functionQueue;
functionQueue = () { s.loadAndCompile(() => previous(), onFail); };
}
functionQueue();
}
我遇到了一个问题,即着色器似乎没有加载或编译。调试显示for循环中的最后一行(第7行)未执行。我可以逐步执行循环,而在跳过第6行之后,它将回到第4行。我不知道为什么。
目前,该方法的用法如下:
Shader.loadAndCompileAll(
() { print("Loaded shaders"); },
() { print("Failed to load shaders"); }
);
我确实注意到,在调试器中查看本地变量时,
onLoad
和onFail
似乎显示为空,即在调试器窗口中,它显示名称onLoad
和值()
。也许与它有关?尽管我无法想象为什么会导致它跳过一行,除非这是一个错误。我是该语言和编辑器的新手,所以我不知道这是否是匿名函数的结果。
最佳答案
调试器似乎跳过了这一行,但是当调用functionQueue()
而不是loadAndCompile()
时,调用onLoad()
。这表示分配语句已执行。
调试器(我在WebStorm上尝试过)似乎存在一个问题,即功能分配未被识别为暂停点。调试器也没有停止在static loadAndCompileAll
的第一行中。
当您以不同的方式设置代码格式时,您至少可以设置断点,在该断点处,调试器在实际调用该函数时会暂停。
static loadAndCompileAll(Function onLoad, Function onFail) {
Function functionQueue = () {
onLoad(); // set breakpoint here
};
for (int i=0; i < allShaders.length; ++i){
Shader s = allShaders[i];
Function previous = functionQueue;
functionQueue = () {
s.loadAndCompile(() => previous(), onFail); // set breakpoint here
};
}
functionQueue();
}
您能否在http://dartbug.com/new上针对此调试器问题创建错误报告?
关于dart - Dart:程序跳过一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25589130/