lua-users home
lua-l archive

[5.4] The string metatable and arbitrary-precision arithmetic

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


There is only one incompatibility listed in the Lua 5.4 (work2) manuall.
> The coercion of strings to numbers in arithmetic and bitwise operations has been removed from the core language. The string library does a similar job for arithmetic (but not for bitwise) operations using the string metamethods. However, unlike in previous versions, the new implementation preserves the implicit type of the numeral in the string. For instance, the result of "1" + "2" now is an integer, not a float.
If backward compatibility of coercion arithmetic is not desired, these
metamethods could be replaed to give arbitrary-precision arithmetic.
For example:
$ sudo luarocks install lbc
$ lua5.4 -l bc
Lua 5.4.0 Copyright (C) 1994-2017 Lua.org, PUC-Rio
 meta = getmetatable''
 for k,v in pairs(bc) do
 if k~='__index' then meta[k] = bc[k] end
 end
 function fermat(n)
 if n==0 then return '3'
 else return (fermat(n-1)-1)^2+1
 end
 end
 fermat(7)
340282366920938463463374607431768211457

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