dart - Dart:程序跳过一行

标签 dart

我有以下代码。使用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"); }
        );

我确实注意到,在调试器中查看本地变量时,onLoadonFail似乎显示为空,即在调试器窗口中,它显示名称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/

相关文章:

async-await - 等待,它是如何工作的?

flutter - 字符串包含列表的属性内部

intellij-idea - 在 Intellij 中调试 dart 应用程序时如何浏览列表内容?

intellij-idea - 在IntelliJ IDEA中调试Dart

gradle - 无法解析 com.android.support :support-annotations:25. 4.0

firebase - 如何为提供者设置登录屏幕过渡的动画?

flutter - 从 Firebase Firestore 过滤并获取数据

flutter - Flutter中API获取数据后如何导航到新屏幕?

flutter - Flutter Image Builder回调问题

flutter - Flutter:如何制作一个更具深度的按钮?