2013-05-26 73 views
2

函數名這可能是非常簡單的,但我是新所以在這裏我們去..串接在Lua

我將如何編寫這樣的:

local color1 = { 255,0,0 } 
local color2 = { 1,200,1 } 
local color3 = { 2,2,150 } 
for i = 1, 3 do 
    local x = "color" .. i[i] 
    print(x) 
end 

我所尋找的輸出

255 
200 
150 

回答

1

如果color1,color2color3表是靜態的;你可以試試這個方法:

local color1, color2, color3 = { 255,0,0 }, { 1,200,1 }, { 2,2,150 } 
color = { color1 = color1, color2 = color2, color3 = color3 } 
for i = 1, 3 do 
    local x = color["color"..i][i] 
    print(x) 
end 

輸出:http://codepad.org/qL5K3jNq

3

最簡單的解決辦法是把顏色信息陣列中的

local colors = { 
    { 255,0,0 }, 
    { 1,200,1 }, 
    { 2,2,150 }, 
} 

-- Iterating by hand: 
for i=1, #colors do 
    local rgb = colors[i] 
    print(rgb[i]) 
end 

-- ipairs is another way to do the same thing 
for i, rgb in ipairs(colors) do 
    print(rgb[i]) 
end 
+2

你不應該在5.1+使用ipairs,它是比'for i = 1,#array do'慢得多,並且做同樣的事情。 – dualed

+2

@dualed:這聽起來有點像不成熟的優化,無論如何,從我聽到的東西來看,它的味道有點大。我真的很討厭輸入數組名稱兩次,或者如果數組是一些表達式的結果,必須創建一個額外的變量。 – hugomg

+0

這是每次迭代1次C函數調用與1次增量操作的關係,因爲'#'操作只調用一次並且總是比'ipairs()'函數執行得更好。不,這不是不成熟,它是做同樣的事情,花費你基本上沒有改變,並且你特別指出了,所以我只評論說,在Lua 5.1及以上版本中使用它並不是一件好事。可能在此之前,甚至沒有,但'#'操作符在5.1中引入,所以你必須解決這個問題。 * *表示過早優化。 – dualed