维基百科讨论:Lua代码风格
Artoria2e5在话题“字符串拼接风格”中的最新留言:8年前
字符串拼接风格
一些模块,例如模块:Articles by Quality and Importance,混用字串拼接运算符 foo = foo ..
和形如 foo = string.format('%s....')
的字符串格式化来在字串后加内容。这样一方面有点乱,另一方面 string.format
的性能也不好看。如果可以接受的话,应该考虑全用拼接运算符(对我来说更可读,因为不用看第几个参数是什么了),甚至可以直接做个 table 用 table.concat
。
如果用 table.concat
的话,大概还是稍微点缀一点字符拼接操作看上去会更可读:
local builder = {}
-- 这样
builder[#builder+1] = '<td blah="' .. blah .. '">' .. blahblah .. '</td>'
-- 这样也能接受(效果降低到避免全 builder 复制)
builder[#builder+1] = string.format('<td blah="%s">%s</td>', blah, blahblah)
-- 这个没有 global 载入,因此速度稍快;同时对用 "foo".format() 的 python 用户更亲切
local footemplate = '<td blah="%s">%s</td>' -- outside of loop
builder[#builder+1] = footemplate:format(blah, blahblah)
-- 总之不能这样
builder[#builder+1] = '<td blah="'
builder[#builder+1] = blah
builder[#builder+1] = '">'
builder[#builder+1] = blahblah
builder[#builder+1] = '</td>'
-- 最后 return 的时候
builder[#builder+1] = '</table>'
return table.concat(builder)