Lua - util_server.lua:440 尝试对本地变量'self'进行索引(其值为nil)

晚上好
你能帮我解决这个问题吗?

错误:race / util_server.lua:440:尝试索引本地的“self”(一个空值)

function string:split(separator)
    if separator == '.' then
        separator = '%.'
    end
    local result = {}
    for part in self:gmatch('(.-)' .. separator) do
        result[#result+1] = part
    end
    result[#result+1] = self:match('.*' .. separator .. '(.*)$') or self
    return result
end
点赞
用户501459
用户501459

你可能把它的调用搞错了。

function string:split(separator)

缩写形式为:

function string.split(self, separator)

给定字符串和分隔符:

s = 'This is a test'
separator = ' '

你需要像这样调用它:

string.split(s, separator)

或者:

s:split(separator)

如果你像这样调用:

s.split(separator)

你未能为 self 参数提供一个值。


顺便说一句,你可以像这样更简单地编写 split 函数:

function string:split(separators)
    local result = {}
    for part in self:gmatch('[^'..separators..']+') do
        result[#result + 1] = part
    end
    return result
end

它的缺点是你不能使用多个字符的字符串作为分隔符,但_优点_是你可以指定多个分隔符。例如,你可以从句子中删除所有标点符号并只提取单词:

s = 'This is an example: homemade, freshly-baked pies are delicious!'
for _,word in pairs(s:split(' :.,!-')) do
    print(word)
end

输出:

This
is
an
example
homemade
freshly
baked
pies
are
delicious
2014-08-14 22:21:02