我正在尝试在Lua中实现具有继承的类 . 另外,在创建新对象时,需要进行某种“类型检查” .
一个特殊要求是使用特定语法来创建类(示例):
Class({Volkswagen, Vehicle, model=String, speed=Number, driving=Boolean})
请注意,参数作为可变长度的列表传递 . 所以我需要一个获取任意数量参数的函数:
function Class (arguments)
name = arguments[1]
superclass = arguments[2]
...
end
前两个参数是类的名称以及从中继承的类的名称 .
我确信解决方案很简单,但我完全不知道如何处理属性的键值对,例如......
print(arguments.model)
print(type(arguments.model))
......都是零 . 任何想法我如何获得属性的类型(字符串,布尔值,数字)?
3 回答
这一行:
并不意味着你认为它意味着什么 . 这是 Value 观 .
当你执行
{Volkswagen}
时,你正在做的是告诉Lua在字符串名称"Volkswagen"
下获取当前存储在全局表中的值 . 我'll assume that there'存储了一些值 .您的问题是
{model=String}
将当前存储在全局表中的值放在字符串名称"String"
下的表中 . 没有名为"String"
的全局变量的可能性很大 . 这意味着您将nil
放在表中 .除非LuaJava定义它们,否则"attributes"(String,Boolean,Number)不存在 . 他们're just empty values. You can' t传递一个空值 . 你可以传递一个字符串,但那是不同的 .
你没有很好地解释你的
Class
函数到底应该做什么,所以我可以't give you a hint on how to do what it is you'试图做得更好 .如果你're just looking for a generic Lua class system, here'我的实施:https://gist.github.com/1722329
它不支持类型检查,但应该可以使用“TypedClass”类轻松实现,以充当所有严格类型类的基础 .
要处理键值对,您可能需要使用内置表函数将引用的表传输到本地表:
结束
Class({“Volkswagen”,“Vehicle”,model =“”,speed = 0,driving = false})