Lua
- Day 1
- 字符串拼接:"Hello" .. " world"
- REPL:> =(function(num) return 3 * num end)(2)
- 函数传参:nil填充
- ‘命名’参数:function f(table) ... end; ==> f{a=1,b="2"}
- elseif
- for i=1,5,2 do ... end
- Day 2
- 迭代table:for k, v in pairs(t) do result[#result + 1] = k .. ": " .. v end
- Metatables
- __tostring
- __index
- __newindex
- Prototypes based OO:new = function(self, args...)
- setmetatable(obj, self)
- self.__index = self
- 语法糖:table:method() instead of table.method(self)
- Coroutines:create/resume/yield
- function fibonacci() ... coroutine.yield(m) ...
- generator = coroutine.create(fibonacci)
- succeeded, value = coroutine.resume(generator)
- Day 3:‘动态语言’vs‘脚本语言’
- lua_State* L = luaL_newstate();
- luaL_openlibs(L);
- luaL_dostring(L, "print('Hello world!')"); //<---
- lua_close(L);
- lua_pushcfunction(L, midi_send);
- ➤lua_setglobal(L, "midi_send");
- int midi_send(lua_State* L){
- double status = lua_tonumber(L, -3); //第一个参数?栈顶(最后一个参数)是-1
- 字符串匹配:local letter, octave, value = string.match(s, "([A-Gs]+)(%d+)(%a+)") //?奇怪的语法
- lua_State* L = luaL_newstate();