2013-11-03 8 views
5

'daki bir işleve nasıl aktarılır Boş değerleri bir işleve aktarmaya çalıştım ancak başarısız oldum. İşte benim kurulumum;Boş değişkenler Lua

function gameBonus.new(x, y, kind, howFast) -- constructor 
    local newgameBonus = { 
     x = x or 0, 
     y = y or 0, 
     kind = kind or "no kind", 
     howFast = howFast or "no speed" 
    } 
    return setmetatable(newgameBonus, gameBonus_mt) 
end 

Sadece "nazik" iletmek ve yapıcının geri kalanını işlemek istemesini istiyorum. Sevmek; Veya yalnızca "howFast" sözcüğünü geçmek istiyorum;

unexpected symbol near ','

cevap

5

nil yapmanız gerekir Lua boş temsil etmek türü ve değeri, yani onun yerine boş bir dize "" ya da hiçbir şey geçme:

local dog3 = dog.new(, , , "faster") 

Ben "" ile ve olmadan hem çalıştı, hata veriyor böyle nil geçmesi: geçen nil ihmal edilebileceğini

local dog3 = dog.new(nil ,nil , "bonus", nil) 

Not. xfalse ne de nil ne olursa olduğunu

if not x then x = 0 end 

, varsayılan değerle x ayarlar:

x = x or 0 

eşdeğerdir, bir örnek olarak ifade ilk parametreyi x atın 0.

1
function gameBonus.new(x, y, kind, howFast) -- constructor 
    local newgameBonus = type(x) ~= 'table' and 
    {x=x, y=y, kind=kind, howFast=howFast} or x 
    newgameBonus.x = newgameBonus.x or 0 
    newgameBonus.y = newgameBonus.y or 0 
    newgameBonus.kind = newgameBonus.kind or "no kind" 
    newgameBonus.howFast = newgameBonus.howFast or "no speed" 
    return setmetatable(newgameBonus, gameBonus_mt) 
end 

-- Usage examples 
local dog1 = dog.new(nil, nil, "bonus", nil) 
local dog2 = dog.new{kind = "bonus"} 
local dog3 = dog.new{howFast = "faster"}