Re: metamethods for assignment and type conversion
[
Date Prev][
Date Next][
Thread Prev][
Thread Next]
[
Date Index]
[
Thread Index]
- Subject: Re: metamethods for assignment and type conversion
- From: Adrien de Croy <adrien@...>
- Date: 2007年8月13日 18:21:55 +1200
Point taken - I guess it's a side-effect of some early design decisions.
Changing the type of the lhs in an expression such as
var1 = var2
is contrary to the concepts those familiar with compiled languages are
used to which is where the compiler attempts to convert var2 into the
type of var1. That confuses us poor simple C and C++ coders.
It becomes difficult to keep track of things if variables become
effectively just a handle to something else, since the type is
effectively mutable on any assignment.
It's another argument (one I'm sure has already been thrashed out) as to
whether it is more useful to convert the lhs to the type of the rhs (as
lua effectively does), or vice-versa.
It's just another source of confusion for C and C++ programmers, who are
used to the other way around. In this respect, Lua doesn't really
protect the user from having to know about types at all. The only
interchangeable ones are strings and numbers, and that's only because
there are built-in converters between these 2 types.
Anyway, it's core to the language, so it probably shouldn't be changed.
In which case, separate functions will need to be written to deep-copy
objects... you end up with code like
deepcopy(var1, var2);
or maybe
var1.Assign(var2);
instead of
var1 = var2;
so I guess __assign is going nowhere.
still no comment on __cast though?
Miles Bader wrote:
Adrien de Croy <adrien@qbik.com> writes:
It could be considered radical maybe for tables.
for userdata and lightuserdata, it makes perfect sense to use the same
syntax to copy one userdata to another one the same as you would a
string value, rather than a function to do it.
It seems a fairly fundamental part of Lua that it's a "reference"
language (like lisp/scheme, clu, etc): variables store references to
their value, not the values (this is slightly relaxed for numbers, but
that doesn't change the general properties of this behavior).
The result is that users can rely on assignment being very cheap, and
having no side effect other than the obvious one.
I think any change to this could be considered "huge", as could be any
change that makes "assignment" (with "=") different than e.g. parameter
passing.
-Miles
--
Adrien de Croy - WinGate Proxy Server - http://www.wingate.com