維基百科討論: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)