[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Are automatic coercions ever going away?
- From: Sean Conner <sean@...>
- Date: Fri, 1 Aug 2014 15:57:43 -0400
It was thus said that the Great Coroutines once stated:
> On Fri, Aug 1, 2014 at 8:19 AM, Roberto Ierusalimschy
> <roberto@inf.puc-rio.br> wrote:
>
> > Just a few days ago we sent a message stating that we are not sure about
> > this whole thing anymore [1]. You probably missed it.
>
>
> I have trouble taking the whole 'coercion in lua is bad' thing anyway.
> It's not like Javascript where you can concatenate and add two things
> together with the same operator (+). I am never confused about this
> in Lua as + will derive numbers, and .. will derive strings. There is
> no overlap for operator use. I don't find these "coercion sites" very
> ambiguous even if metamethods are called from left-to-right on
> availability. I'm just tired of people who hate coercion in every
> language speaking like they know what's best for Lua from an
> ideological pedestal. I do agree that have the option to disable or
> leave enabled coercion might have the potential for a fragmented Lua
> community, but I find the prospect very unlikely. The only rift I've
> ever seen has been between Lua<->LuaJIT.
>
> I can't think of any such places but I know there must be code hiding
> in the C side of Lua where coercion should be possible (following the
> normal rules) but isn't. I'd like to see more work done to remove
> these situations -- otherwise I'm already happy.
One situation I hit in C was the following:
static int foobar___index(lua_State *L)
{
foobar__s *foo = luaL_checkudata(L,1,TYPE_FOO);
if (lua_isstring(L,2))
...
else if (lua_isnumber(L,2))
...
}
Odd bugs until I actually read the description for lua_isstring():
Returns 1 if the value at the given index is a string or a number
(which is always convertible to a string), and 0 otherwise.
lua_to[l]string() will do a convertion if the target is a number. I'm sure
it's convenient in some cases, but not in others.
Oddly enough, I dont' have an issue with lua_isboolean() or
lua_toboolean() even though they do a conversion as well (nil or false as
false, anything else is true).
-spc (For now, I just check for numbers first, then strings ... )