On 18/07/16 06:26 AM, steve donovan wrote:
On Mon, Jul 18, 2016 at 9:16 AM, Rain Gloom <raingloom42@gmail.com>
wrote:
If I may play devil's advocate: what about simply using a special data
structure for such special cases? Ie.: just implement it as a
feature of a
usual table with an __index and __newindex metamethod?
Not such a devilish idea; why not indeed? That's the method which has
worked fine for us in the past
As Philipp Janda said earlier:
You want `t[bigint(3)] = x` to be equivalent to `t[3] = x`, but
`bigint(3)+bigint(3)` should use custom big integer addition, *not*
the built-in Lua integer addition. For `bigint("2^128")` you'll still
use an interned userdata so that `t[bigint("2^128")] = 1;
print(t[bigint("2^128")])` works as expected (`__key()` would just
return the userdata itself in this case).
Another example would be a UTF8String where `#` returns the number of
characters not bytes, but which behaves like a regular string when
used as a key in a table (and preferably when compared to a regular
string via `==`, but that's a different story).