[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Change #..., disallow #{}, add ...[]
- From: Dirk Laurie <dirk.laurie@...>
- Date: Mon, 19 Oct 2015 10:30:12 +0200
2015-10-19 0:34 GMT+02:00 Soni L. <fakedme@gmail.com>:
> First of all #{} makes no sense, either you know the size
> or you should be using select('#') instead.
If you mean no sane Lua programmer should type that precise
expression, then I agree. If you mean that # acting on any table
constructor makes no sense, then I disagree. As Humpty Dumpty
might have said to Alice: what is #{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}?
> Second it'd be a lot more useful if #... meant the same as
> select('#', ...).
> [skip]
> ...[n] could mean the same as select(n, ...) (but with an opcode
> instead of a function, so that it's slightly faster).
I agree with the spirit of these suggestions. The length operator
has the right feel.
`select` is arguably the least elegant function in the standard library.
There is absolutely no reason why a function call is needed.
The OP_VARARG instruction at present does not use its `C` field.
Those nine bits could be exploited to provide the functionality of
`select`.
However, there is no need for `...` if we are not calling a function.
The OP_VARARG instruction knows where the vararg is.
The following syntax could be used:
## -- select('#',...)
#index -- select(index,...) when n is an integer
All that we would need to sacrifice is the __len metamethod when
its argument is an integer, since then "Lua knows what to do".