lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On Sat, Sep 11, 2021 at 4:10 AM Xmilia Hermit <xmilia.hermit@gmail.com> wrote:
> local up = {}
> setmetatable(up, {__newindex=function()
>      up = ""
> end})
>
> local function test()
>      up.x, up.y = 1, 1
> end
>
> test()
>
> This failes with: attempt to index a string value (upvalue 'up').
> However, I would expect from the manual that
> a=up, b=up, c=1, d=1 are evaluated (in any order) as they are
> expressions and then the assignments
> a.x = c, b.y = d are assigned in any order which would not result in the
> error observed.
>
> Am I missing something from the manual or is this a bug?

Regardless of the manual or the implementation...

IMO, either up.x or up.y will be evaluated first.  (Evaluated to a
settable storage location, not a value.)  Once one is evaluated, the
other will fail.