如何在Lua中定义变量以及如何在Cocos2d-x中的其他Lua脚本中调用它

时间:2014-08-26 08:16:13

标签: lua cocos2d-x

如何在Lua中定义变量(常量)以及如何在Cocos2d-x中的其他Lua脚本中调用它?

以我的方式: main.lua

 local r = require("src/Square")
 local constant= r:getConstant()

Square.lua

function Square:getConstant()
    return 10
end

还有其他更优雅的方式吗?任何建议将不胜感激。

2 个答案:

答案 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可以更改为本地功能(推荐),因此在下一次创建对象时不会出现任何问题。