在rascal中循环内的onMouseDown指针

时间:2014-01-24 18:46:29

标签: rascal

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

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

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

1 个答案:

答案 0 :(得分:1)

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

闭包捕获文件变量,而不是它的值。所以你slways引用它的最后一个值。 tmp变量是为每次迭代新分配的,因此它没有这个问题。