1

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

Animator = Class{}

function Animator:init(statictilesize = true)

    self.isTileSizeStatic = statictilesize

end

我很混乱。不过,我只使用 Lua 一个月,我更像是 C++ / C# / Python 人。也许我错过了一些东西。

4

2 回答 2

2

好吧,显然我是一个完全的 Lua Noob / 被宠坏的 C++ Python 家伙。

Lua 不允许这样做。相反,在 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

有点黑客在一起类型转换/检查。我可能是错的,我在这一切都是菜鸟。我从未接受过正规的编程教育。我可能听起来像个白痴。

于 2018-08-10T16:26:21.183 回答
1

通常,似乎要做的是像平常一样定义您的函数,如果未设置您希望成为可选的变量,您稍后设置它们,并重新定义您的函数签名以查找表:

Animator = Class{}

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

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

Animator.init{statictilesize = false}

两者nilfalse都是 Lua 中的“虚假”条件。Lua 中的所有其他条件都是真实的,包括0and ''。因此,为了获得 whenstatictilesize未设置的功能,它默认为 true 条件,您必须检查其不等式是否为 false,因为其他所有内容都将为 true(包括nil因为nilis not false)。

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

它与 Python 有很大不同。

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

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

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

function Animator:init(args)
    if args.statictilesize ~= nil then self.isTileSizeStatic = args.statictilesize else self.isTileSizeStatic = true end
end
于 2018-08-10T16:34:31.980 回答