从迭代器中获取第一个值

Mar*_*oij 0 lua

我想用分隔符分割一个字符串,只得到最后一部分.我不关心其余的事情.我知道我能做到:

local last
for p in string.gmatch('file_name_test', '_%w+$') do last = p end
Run Code Online (Sandbox Code Playgroud)

哪个有效,但是,恕我直言,丑陋.

有没有更优雅的方式来说:

local last = string.gmatch('file_name_test', '_%w+$')[1]
Run Code Online (Sandbox Code Playgroud)

哪个不起作用,因为gmatch返回迭代器(而不是表).

Nic*_*mon 6

使用string.match不是迭代器:

local last = string.match('file_name_test', '_(%w+)$')
print (last)  --> test
Run Code Online (Sandbox Code Playgroud)


war*_*ing 5

尽管其他答案确实为您提供了针对您的情况的正确答案,但我将针对您的问题提出一个答案。这是从迭代器中获取第一项。

答案其实很简单。由于迭代器只是不断返回直到返回 nil 的东西,所以我们只需要调用它!

local first = string.gmatch('file_name_test', '_%w+$')()
Run Code Online (Sandbox Code Playgroud)

然而我很困惑,因为在你的问题中你还问了它会返回的最后一件事。我很遗憾地说,如果不迭代所有这些,您就无法做到这一点,因为迭代器无法“向前跳转”。