Lua,设置默认函数参数值。这不会错吧?
Lua, setting default function parameter values. This can't be wrong?
Eclipse 告诉我 ')' 应该在 '=' 附近,但这肯定不对吗?这是我的代码:
Animator = Class{}
function Animator:init(statictilesize = true)
self.isTileSizeStatic = statictilesize
end
我很困惑。不过,我只使用 Lua 一个月,我更像是一个 C++ / C# / Python 的人。也许我错过了什么。
好吧,显然我是一个总 Lua 菜鸟/被宠坏的 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
有点乱七八糟的类型转换/检查。我可能是错的,我对这一切都是菜鸟。我从未接受过正规的编程教育。我可能听起来像个白痴。
通常似乎要做的是像平常一样定义你的函数,如果你想成为可选的变量没有设置,你稍后设置它们,并重新定义你的函数签名来寻找一个table:
Animator = Class{}
function Animator:init(args)
self.isTileSizeStatic = args.statictilesize ~= false
end
稍后您使用这种语法形式调用此函数:
Animator.init{statictilesize = false}
nil
和false
都是Lua中的"falsey"条件。 Lua 中的所有其他条件都为真,包括 0
和 ''
。因此,为了获得当 statictilesize
未设置时默认为真条件的功能,您必须检查其不等式为假,因为其他一切都为真(包括 nil
因为 nil
不是 false
).
请注意,这会将您的参数隐式转换为布尔值
和Python有点不同。
详情请看这里:
https://www.lua.org/pil/5.3.html
此外,如果您希望 false 成为传递给函数的 acceptable 参数集的一部分(或者您只是不想将参数隐式转换为布尔值),您可以使用以下语法:
function Animator:init(args)
if args.statictilesize ~= nil then self.isTileSizeStatic = args.statictilesize else self.isTileSizeStatic = true end
end
Eclipse 告诉我 ')' 应该在 '=' 附近,但这肯定不对吗?这是我的代码:
Animator = Class{}
function Animator:init(statictilesize = true)
self.isTileSizeStatic = statictilesize
end
我很困惑。不过,我只使用 Lua 一个月,我更像是一个 C++ / C# / Python 的人。也许我错过了什么。
好吧,显然我是一个总 Lua 菜鸟/被宠坏的 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
有点乱七八糟的类型转换/检查。我可能是错的,我对这一切都是菜鸟。我从未接受过正规的编程教育。我可能听起来像个白痴。
通常似乎要做的是像平常一样定义你的函数,如果你想成为可选的变量没有设置,你稍后设置它们,并重新定义你的函数签名来寻找一个table:
Animator = Class{}
function Animator:init(args)
self.isTileSizeStatic = args.statictilesize ~= false
end
稍后您使用这种语法形式调用此函数:
Animator.init{statictilesize = false}
nil
和false
都是Lua中的"falsey"条件。 Lua 中的所有其他条件都为真,包括 0
和 ''
。因此,为了获得当 statictilesize
未设置时默认为真条件的功能,您必须检查其不等式为假,因为其他一切都为真(包括 nil
因为 nil
不是 false
).
请注意,这会将您的参数隐式转换为布尔值
和Python有点不同。
详情请看这里:
https://www.lua.org/pil/5.3.html
此外,如果您希望 false 成为传递给函数的 acceptable 参数集的一部分(或者您只是不想将参数隐式转换为布尔值),您可以使用以下语法:
function Animator:init(args)
if args.statictilesize ~= nil then self.isTileSizeStatic = args.statictilesize else self.isTileSizeStatic = true end
end