2014-01-24 38 views
1

在下面的代码中,我希望每个框(图)都有自己的mousedown。 但渲染完所有的盒子后,使用相同的文件,最后一个读取文件。onMouseDown在流氓循环中的指针

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

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

回答

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

闭包捕获文件变量,而不是它的值。所以你的sl have有一个参考它的最后价值。 tmp变量是为每次迭代新分配的,所以它没有这个问题。

顺便说一下,我们计划在不久的将来改变这种行为