1

在下面的代码中,我希望每个框(图)都有自己的 mousedown。但是渲染后所有的盒子都使用同一个文件,最后读取的文件。

    for(loc file <- lsFile){
       lsBox += box(
                    onMouseDown(bool (int butnr, map[KeyModifier,bool] modifiers) {
                        renderFile(file);
                        return true;
                    })
                );
    }

任何人都知道如何解决这个问题?

4

1 回答 1

1
for(loc file <- lsFile){
   loc tmp = file;
   lsBox += box(
                onMouseDown(bool (int butnr, map[KeyModifier,bool] modifiers) {
                    renderFile(tmp);
                    return true;
                })
            );
}

闭包捕获文件变量,而不是它的值。所以你总是引用它的最后一个值。tmp变量每次迭代都是新分配的,所以不存在这个问题。

于 2014-01-27T16:56:49.643 回答