这是Lua书籍编程中的一个案例。代码被遵循,我的问题是为什么它不能得到该行的最后一个字?
function allwords()
local line=io.read()
local pos=1
return function ()
while line do
local s,e=string.find(line,"%w+ ",pos)
if s then
pos=e+1
return string.sub(line,s,e)
else
line=io.read()
pos=1
end
end
return nil
end
end
for word in allwords() do
print(word)
end
答案 0 :(得分:4)
在这一行:
local s,e=string.find(line,"%w+ ",pos)
-- ^
模式"%w+ "
中有一个空格,因此它匹配一个单词后跟一个空格。输入时,例如word1 word2 word3
并按 Enter ,word3
后面没有空格。
本书的例子中没有空格:
local s, e = string.find(line, "%w+", pos)
答案 1 :(得分:0)
对不起,呃,"复活"这个问题,但我认为我有更好的解决方案。
您可以不执行此操作,而不是使用 allwords 功能:
for word in io.read():gmatch("%S+") do
print(word)
end
功能
gmatch("%S+")
返回字符串中的所有单词。