如何在Lua中跳过可选参数?

有一种方法我一直在称之为:

t1,t2 = LSL:GetDiffItem(item)

其中该方法声明为:

GetDiffID(item,ignoreEnchant,ignoreGem,red,yellow,blue,meta,ignorePris)

现在我想传递附加参数,跳过一些:

itemignoreEnchantignoreGem,_red_,_yellow_,_blue_,_meta_,ignorePris

尝试_跳过_参数:

t1,t2 = LSL:GetDiffItem(item,ignore,ignore,,,,,ignore)

但当然这不起作用:

意外符号附近的 ','

那么,如何在Lua中跳过可选参数?


另请参阅

原文链接 https://stackoverflow.com/questions/7131792

点赞
stackoverflow用户298661
stackoverflow用户298661

传递 nil。这将与从未传递参数一样。但是,请注意文档中指出您可以这样做,因为大多数函数不会检查每个独立的可选参数,只有在提供了前一个参数后才会检查每个参数。

2011-08-20 12:50:10
stackoverflow用户596285
stackoverflow用户596285

如果您正在编写自己的函数(而不是使用预先存在的 API),我使用的方法是将一个表作为函数的唯一参数传递,并在该表中填写相应的值。在函数的第一步中分配一个默认值为元表避免在每一步查找默认值,但请确保用户知道您正在覆盖输入的元表。

2011-08-20 15:02:50
stackoverflow用户282536
stackoverflow用户282536

使用 nil

请注意,当 C 代码使用 gettop,或者在类型的 switch/case 中依赖于“NONE”,或者显式地检查 none 或 nil 而不是 lua_isnoneornil 时,这种方法不起作用。

2011-08-21 04:24:07
stackoverflow用户3919942
stackoverflow用户3919942

你可以使用[命名参数](http://www.lua.org/pil/5.3.html)。 如lua.org所述:“当函数有许多参数并且大多数参数是可选的时,这种参数传递方式特别有帮助。”

思路是将所有参数传递为表格:

function InfoItem(item)
  if item.name then
    print("Name: ",item.name)
  end
  if item.color then
    print("Color: ",item.color)
  end
  if item.enchant then
    print("Enchant: ",item.enchant)
  end
  if item.specialInfo then
    print(item.specialInfo)
  end
end

InfoItem{name = "互联网巨魔的灭霸", color = "银色"}
InfoItem{name = "死亡的脚趾甲钳", enchant = "牢不可破", specialInfo = "稍稍用力即可剪破最厚的指甲。"}
2015-03-17 06:01:26