Skip to content

__pairs metamethod is ignored when iterating Lua tables from Python #80

Open
@immerrr

Description

@immerrr

Here's a simple example:

In [16]: copy, proxy = LuaRuntime().execute("""
obj = {foo=123, bar=345}

proxy = {}
setmetatable(proxy, {
  __index = function(self, key)
    return obj[key]
  end,

  __newindex = function(self, key, value)
    obj[key] = value
  end,

  __pairs = function(self)
    return pairs(obj)
  end,
})

copy = {}
for k,v in pairs(proxy) do
  copy[k] = v
end

return copy, proxy
""")

In [17]: copy['foo']
Out[17]: 123

In [18]: proxy['foo']
Out[18]: 123

In [19]: list(copy.items())
Out[19]: [(u'foo', 123), (u'bar', 345)]

In [20]: list(proxy.items())
Out[20]: []

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions