Lua string.find 找不到一行中的最后一个字

Lua string.find can't find the last word in a line

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

这一行:

local s,e=string.find(line,"%w+ ",pos)
--                             ^

模式 "%w+ " 中有一个空格,因此它匹配后跟一个空格的单词。例如,当您输入 word1 word2 word3 并按 Enter 时,word3 后面没有空格。

书中的例子没有空格:

local s, e = string.find(line, "%w+", pos)

抱歉,呃,"resurrecting" 这个问题,但我想我有更好的解决方案。

不使用 allwords 函数,你能不能只这样做:

for word in io.read():gmatch("%S+") do
   print(word)
end

函数

gmatch("%S+")

returns 字符串中的所有单词。