lua-users home
lua-l archive

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


> Doesn't it get called once per floating point number encountered while lexing?

No; it caches the 'decpoint' in the 'decpoint' field. It only calls
'trydecpoint' (and then 'lua_getlocaledecpoint') if the conversion
fails *after* replacing the dot with the cached 'decpoint'.


> I guess you could do something like:
> 
> local function safe_tonumber(s, b)
>     if b ~= nil then
>         return tonumber(s, b)
>     else
>         local func = load("return " .. s)
>         if not func then return nil end
>         return func()
>     end
> end
> 
> Which is slightly less bad than the example earlier that uses setlocale.
> But still.... I consider this an issue with lua.

This seems quite inefficient.

Couldn't you do what Lua does? Something along these lines:

  local function safe_tonumber(s)
    local locale_dec_point = string.sub(tostring(1.1), 2, 2)
    s = string.gsub(s, "%.", locale_dec_point)
    return tonumber(s)
  end

(You might try to avoid computing 'locale_dec_point' every time,
doing what Lua does: cache its result once and update when conversion
fails...)

-- Roberto