Lua 编程题目
1. 实现一个Complex复数结构,支持复数的加、减、乘、除四则运算
示例:
local c1 = Complex(3.2, -5.1)
local c2 = Complex(7, 8)
local c3 = Complex(math.pi)
local c4 = Complex()
print((c1 + c4) * (c1 / c2 + c3))
输出: (6.765397376443092-16.92760925897166i)
注:精度不需要刻意关注
2. 实现一个json加载器,可以读取给定的json格式的文件并解析成Lua内存Table结构
要点1:判断Object类型的Key,如果是Int类型的字符串,需要转化成Number类型
要点2:不需要额外处理null、nan、inf等特殊类型的结构(默认文件中不存在)
要点3:全部使用utf-8编码,不需要额外处理中文字符的问题
要点4: 禁止引入第三方库实现功能
示例:
如源文件格式
{"1":{"a":100}}
解析后可以如下打印
local v = JsonLoader.parse(input_file)
print (v[1].a) --> 100
3. 实现类似于C++的对象以及继承
有基类表 BaseObject
其拥有函数
function BaseObject:new()
--construct
end
function BaseObject:myFunc()
print("call BaseObject:myFunc")
end
function BaseObject:myFunc2()
print("call BaseObject:myFunc")
end
派生类 MyObject继承于BaseObject,并重写myFunc2使其输出"call MyObject:myFunc2"
例:
local obj = MyObject:new()
obj:myFunc()
obj:myFunc2()
输出:
call BaseObject:myFunc
call MyObject:myFunc2
4. 实现一个事件系统EventSystem
接口:
AddListener(event, handler)
RemoveListener(handler)
Dispatch(event)
注:event类型可以是字符串或数字
要求:handler能够支持对于问题3中的对象函数的绑定,如两个MyObject对象Obj1和Obj2,对于相同的一个事件MyEvent1,使用Obj1:myFunc和Obj2:myFunc2进行监听,当调用EventSystem的Dispatch(MyEvent1) 时,能够输出:
call BaseObject:myFunc
call MyObject:myFunc2
4.1 针对"对象函数"的绑定,EventSystem需要新增一个接口
RemoveObjectListeners(Obj)
将对象作为参数传入,可以移除所有此对象上所绑定的handler。如对象Obj1将MyEvent1和MyEvent2分别绑定到了myFunc()和myFunc2()上,当调用EventSystem的RemoveObjectListeners(Obj1)时,绑定将取消(MyEvent1和MyEvent2在派发时,Obj1的myFunc和myFunc2不会被调用);