2014-01-24 78 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變量是爲每次迭代新分配的,所以它沒有這個問題。

順便說一下,我們計劃在不久的將來改變這種行爲