如何在Lua中定义变量(常量)以及如何在Cocos2d-x中的其他Lua脚本中调用它?
以我的方式: main.lua
local r = require("src/Square")
local constant= r:getConstant()
Square.lua
function Square:getConstant()
return 10
end
还有其他更优雅的方式吗?任何建议将不胜感激。
答案 0 :(得分:4)
您可以将其设为全局变量:
constant = r:getConstant()
但变量不会是常数。 Lua不知道immutable / readonly / const变量的概念。
有一些技巧可以使用Lua表的metatable来防止值的变化,虽然这需要值在表中,并且你不能阻止表被更改(即设置nil或其metatable替换)。
简单地使用返回常量值的函数是确保值的常量的更简单方法。
我过去所做的是使用标记常量值的符号,例如:
_constant = 10
local _localConstant = 11
_前缀表示变量为常量。或者,如果这些是C / C ++中的已知常量或通常已知的框架(即DBL_EPSILON或M_PI_2),那么#define宏的ALL-CAPS样式模拟效果很好。这只是程序员的提醒。
最后,还有" const" table是一个全局表,定义了一些假设的常量值:
const = {thisIsTen = 10, thatIsEleven = 11}
使用该表可以清楚地表明这些是常量:
result = 100 * const.thisIsTen
答案 1 :(得分:0)
如果您正在寻找只读且无法更改的常量(常量)值,则需要为其创建一个函数(您已经拥有它)。您还必须知道lua通过值而不是通过引用获得基本类型(数字,布尔值,零,字符串)的返回(仅当您通过创建返回它们时)。
以下是您的功能的替代品:
square.lua
Square = {}
Square.__index = Square
local _const = 10
function Square:GetConst()
local const = _const
return const
end
-- Test function
function Square:MoveUp()
_const = _const + 2
end
return Square
main.lua
local sr = Require("src/Square")
print(sr:GetConst()) -- 10
local plus = sr:GetConst() + 4
print(sr:GetConst(), plus) -- 10 14
sr:MoveUp()
print(sr:GetConst()) -- 12
另请注意,Square可以更改为本地功能(推荐),因此在下一次创建对象时不会出现任何问题。