function findWord(s,i)
-- find first word in given text
local j = i+1
while not _isWhite(s:byte(j)) and j < #s do -- getting error here
j = j + 1
end
return s:sub(i,j), j
end
function splitText(s,maxLen)
-- split text into chunks of maxLen length
rs ={}
local function _g(s,i,c,rs)
-- recursively split text
local function _f(s,i,c)
-- recursively find words and add each word to a chunk
local w,i = findWord(s,i)
if i == #s then return c..w end
if #(c..w) <= maxLen then
c = c..w
s = s:sub(i+1,#s,true)
return _f(s,1,c)
else
return c
end
end
rs[#rs+1] = _f(s,1,'')
i = i+#rs[#rs]
if i < #s then
local s = s:sub(i,#s,true)
return _g(s,1,'',rs)
else
return rs
end
end
return _g(s,1,'',rs)
end
위의 함수를 사용하여 문자열을 분할했습니다. 이전에는 작동했지만 이번에는 "call stack이 최대 깊이 100을 초과했습니다. 함수가 우연히 스스로를 호출하지 않습니다. " 왜이 오류가 발생하는지 알기 쉽게 설명했기 때문에 스크립트의 나머지 부분과 동일한 분할 기능이 제대로 작동하고 있으므로이 동작은 무작위로 보입니다.호출 스택이 최대 깊이 100, 루아를 초과했습니다
은 편집 : 그것은 이전 일 이후 예, isWhiteSpace 나에게 제공하는 다음과 같은 코드가되었다는, 나는이를 변경되어 있지 않다. 여기 isWhite 기능은 다음과 같습니다
function _isWhite(byte)
return byte == 32 or byte == 9
end
무엇을하려는 것입니까? 공백 주위의 단어를 분할 하시겠습니까? 그것은 패턴과 gmatch를 사용하는 것이 더 좋을 것입니다. – dr01d3k4
@ dr01d3k4 : 그렇습니다. isWhiteSpace가 나에게 제공되었고 다음 코드가 있습니다. 이전에 작동 한 이후로 변경하지 않아도됩니다. 여기에 isWhite 함수가 있습니다 : function _isWhite (byte) return 바이트 == 32 또는 byte == 9 end –
이 오류의 원인을 알고 싶습니다. –