lua-users home
lua-l archive

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



On 03/12/2016 05:37 PM, Andrew wrote:
> On 12/03/16 17:02, Rena wrote:
>> On Mar 12, 2016 9:57 AM, "Andrew Cannon" <ajc@gmx.net <mailto:ajc@gmx.net>> wrote:
>>>
>>> On 11/03/16 09:24, Dirk Laurie wrote:
>>>> 2016-03-10 17:55 GMT+02:00 Coda Highland <chighland@gmail.com
>> <mailto:chighland@gmail.com>>:
>>>>
>>>>> At this point you might as well use _.a = 1 and then you no longer
>>>>> even need a with statement.
>>>>
>>>> I use local names consisting of one capital letter instead of _.
>>>> Idioms like "for _,value in pairs(tbl) do" cultivate a habit that
>>>> the underscore is used for return values that one does not
>>>> intend to refer to.
>>>>
>>>
>>> Perhaps this syntax could be extended to allow already initialized table members
>>> to be used in initialization later members, a feature which I have sometimes
>> missed:
>>>
>>> eg:
>>>
>>> local t = {
>>>         a = x1 * x2,
>>>         b = _.a + 1
>>> }
>>>
>>> The '_' in this case would reference the table currently being built.
>>>
>>> Andrew
>>>
>>>
>> I think `b = t.a + 1` would be more natural, but I don't know how doable it is.
>>
> 
> ok, bad example! - consider:
> 
> func( { a = x1 * x2; b = _.a + 1} )
> 
> -a
> 
> 
How about something like:

function with(t, fn)
  setfenv(fn, t)
  fn()
  return t
end

local t = with({}, function()
  a = x1 * x2
  b = a + 1
end)

I don't like the idea that the order of a table literal might matter,
especially for cases where tables are generated by code.