Lua,如何设置默认函数参数值。这不可能错了吧?

Eclipse 告诉我在 '=' 附近期望有 ')',但是这肯定不对吧? 以下是我的代码:

Animator = Class{}

function Animator:init(statictilesize = true)

    self.isTileSizeStatic = statictilesize

end

我很困惑。我只学习Lua一个月,我更擅长C++、C#、Python这些语言。或许我漏掉了什么。

点赞
用户5910286
用户5910286

好的,显然我是一名完全陌生的 Lua 新手,习惯了 C++ 和 Python 的待遇。

Lua 不允许这样做。相反,在初始化或构造函数内部,应该放置:

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-10 16:26:21
用户88888888
用户88888888

通常情况下,定义函数时将想要可选的变量暂时不设值,稍后再设置,并重新定义函数以查找表的形式:

Animator = Class{}

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

之后你可以以这种语法形式调用该函数:

Animator.init{statictilesize = false}

在 Lua 中, nilfalse 都是虚值条件,其他所有条件都是真实值,包括 0 和 ''。因此,为了得到这种功能,即当 statictilesize 未设置时,它默认为真实条件,你必须检查它是否不等于 false,因为其他所有条件都会为真,包括 nil,因为 nil 不等于 false

请注意,这会将你的参数隐式转换为 bool 类型。

这是 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-10 16:34:31