lua中迭代器问题

royanimal
  • 55
  local unks = {'<unk>', '<UNK>', 'UUUNKKK'}
  for _, tok in pairs(unks) do
    self.unk_index = self.unk_index or self._index[tok]

我查了一下pairs是table元素的迭代器,想请问一下为什么不直接写成for _, tok in unks do,而要写成pairs()的形式,两者有什么区别吗?能解释一下吗?我记得python中好像也不用加pairs()这种函数吧。

回复
阅读 2.3k
3 个回答

python也能写成这样,如果不用函数那就要在语言层面(这里应该是对象的属性之类的地方)加一下约定和支持,lua设计是小巧精悍,连这一点负担都是不肯加的

Python 给你语法加糖 lua 没有这样的糖罢了....

pairs可以理解是lua提供的一个默认迭代器,类似的还有ipairs,不直接写成for _, tok in unks do形式的一个好处就是,你可以根据需要的迭代方式,选择使用不同的迭代器,甚至可以自己实现一个,满足了不同的迭代需求。

宣传栏