lua-users home
lua-l archive

Re: Are automatic coercions ever going away?

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


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 ... )

AltStyle によって変換されたページ (->オリジナル) /