Lua,设置默认功能参数值。这不会错吗?

时间:2018-08-10 16:21:25

标签: function parameters lua default-value expected-exception

Eclipse告诉我')'应该在'='附近,但是肯定不能对吗?这是我的代码:

Animator = Class{}

function Animator:init(statictilesize = true)

    self.isTileSizeStatic = statictilesize

end

我很困惑。虽然我只用Lua一个月,但我更像是C ++ / C#/ Python的家伙。也许我想念一些东西。

2 个答案:

答案 0 :(得分:1)

好的,显然我是Lua Noob的全部/宠坏了C ++ Python的人。

卢阿不允许这样做。相反,在init或构造函数中,放入:

argument = argument or defaultValue

function Animator:init(statictilesize)
    statictilesize = statictilesize or true
    self.isTileSizeStatic = statictilesize
    -- Yikes
end

编辑:考虑到在第一个参数之后我需要更多的参数,因此我找到了一个更稳定的解决方案。

function Animator:init(booleanstatictilesize, totalanimationstates, totalanimationframes)

    if booleanstatictilesize ~= false then
      self.isTileSizeStatic = true
    else
      self.isTileSizeStatic = false
    end

end

乱砍式铸造/检查排序。我可能是错的,我真是个菜鸟。我从未接受过正规编程教育。我听起来像个白痴。

答案 1 :(得分:0)

通常看来,要做的是像普通一样定义函数,如果未设置要可选的变量,则稍后再设置它们,然后重新定义函数签名以查找表:

Animator = Class{}

function Animator:init(args)
    self.isTileSizeStatic = args.statictilesize ~= false
end

稍后您使用以下语法形式调用此函数:

Animator.init{statictilesize = false}

nilfalse都是Lua中的“假”条件。 Lua中的所有其他条件都是真实的,包括0''。因此,为了获得在未设置statictilesize时将其默认设置为true的功能,您必须将其不等式检查为false,因为其他所有条件都将为true(包括nil,因为{{1} }不是nil)。

请注意,这会将您的论点隐式转换为布尔值

与Python有很多不同。

有关更多详细信息,请参见此处:

https://www.lua.org/pil/5.3.html

此外,如果您希望false成为传递给函数的可接受参数组的一部分(或者您只是不想将参数隐式转换为布尔值),则可以使用以下语法:

false